37,743
社区成员




>>> a=[1,2]
>>> def f(b):
... b[0]='a'
>>> a
[1, 2]
>>> f(a)
>>> a
['a', 2]
f(b)中的b和外面的a本来就是同一个对象嘛,对b[0]赋值等同于对a[0]赋值。
>>> a=3
>>> def f(b):
... b=1
...
>>> f(a)
>>> a
3
>>> a=3
>>> id(a)
27022056
>>> b=3
>>> id(b)
27022056
id完全相同。因此像a=3然后a=4,并非是a的值变了,而是a的引用变了,原来引用对象3,现在引用对象4。>>> a=1
>>> id(a)
27022080
>>> def f(b):
... print id(b)
... print a is b
... b='a'
... print id(b)
>>> f(a)
27022080
True
27176480
前两行清楚地说明a和b是引用的同一个对象1,id是相同的。所以是传的引用。为什么f(a)之后值没有变?因为b='a'是生成为一个新的对象,然后让b重新指向这个新的对象,而不再指向原来的对象1(就是我上面说的不是改变值,而是改变了引用)。