Python3参数传递-忒恶心了吧
2021-02-05 21:15
标签:基础 连续 加法 python 不可变对象 基础上 一个 传递 str Python参数传递情况没有我想的那么简单。不是非黑即白。 1. 不可变对象 2. 可变对象 (1) 增删 (2) 加减 不可变对象需要解释?str int 这种,函数中的修改对外部无影响。 重点在可变对象如list这种. 这很简单,相信大家都懂,但下面才是关键 为啥不是 [‘phpno1‘, 4] ? 鄙人才疏学浅,说不清楚,可能叙述有误,多见谅。 因为执行加法的时候创建了一个新的列表,使 l 指向了新的列表,改变了 l 的值 那为什么append, extend可以改变 l 的值呢? 因为它是在原列表的基础上追加(内存空间连续?), l 还是指向的原来的列表。其实这里就有点像C++的指针了。 变量无类型, 对象有类型。l 是一个变量, 它指向了list。 但是它也可以指向函数,类, 其他的list。 所以终归来说还是地址和内存。。。。。。 实际上def f(l) 传进来的是一个地址, 并不在乎你的类型。 如果函数修改了这个内存地址内的值(eg extend,append...),那么是会影响外部的 如果函数修改的不是这个内存地址内的值, 那么不会影响外部,而是创建了新的局部变量。 eg: l = l + [4], Python3参数传递-忒恶心了吧 标签:基础 连续 加法 python 不可变对象 基础上 一个 传递 str 原文地址:https://www.cnblogs.com/CodeBeyond/p/12785911.htmldef f(l):
l.extend([‘ilovecxk‘, 123])
a = [‘phpno1‘]
f(a)
print(a) # [‘phpon1‘, ‘ilovecxk‘, 123]def f(l):
l = l + [4]
a = [‘phpno1‘] f(a)
print(a) # [‘phpno1‘]
l = [1,3,‘cxk‘]
print(id(l)) # 2875527776960
l.append(666)
print(id(l)) # 2875527776960
l = [1,3,‘cxk‘]
print(id(l)) # 1759618321856
l = l + [666]
print(id(l)) # 1759618322176