参数的传递是通过自动将对象赋值给本地变量来实现的,作为参数被传递的对象从不自动拷贝
在函数内部的参数名的赋值不会影响调用者
改变函数的可变对象参数的值也许会对调用者有影响(实质:不可变对象(如字符串 简单类型 元组)是通过‘值‘进行传递的,可变对象如字典 列表是通过‘指针‘进行传递的)
>>> def change(a,b):
a=2
print id(b)
print b
b[0]=‘spam‘
print b
>>> x=1
>>> l=[1,2]
>>> change(x,l)
27900424
[1, 2]
[‘spam‘, 2]
>>> b
Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
b
NameError: name ‘b‘ is not defined
>>> id(l)
27900424
>>>
b是一个本地变量名,但是它被传给了一个可变对象,因为第二个赋值是在原处发生的对象的改变,对函数中的b[0]进行赋值的结果会在函数返回后影响L的值,实际上我们没有修改b,我们修改的是b当前所引用的对象的一部分,并且这个改变将会影响调用者
原文地址:http://blog.csdn.net/u012829152/article/details/41868967