比如我某个函数要修改一个很大的数据集,然后将数据集作为参数传递,需要生成这一个数据集的副本?
如果函数参数是可变的对象,比如列表字典等,那么参数的传递就是引用,不会自动生成副本。如果确实需要一个参数副本,应使用copy等方法手动生成。下面的代码证明了这一点:函数f的第1个参数是直接引用,第2个参数则传入一个副本。
>>> import copy
>>> x, y = [1,2,3], {'name':'xufive','age':20}
>>> def f(a, b):
a[0] += 5
b['age'] += 5
>>> f(x, copy.copy(y))
>>> x
[6, 2, 3]
>>> y
{'name': 'xufive', 'age': 20}
我记得也是,可变数据类型是引用传入,而不可变数据类型是副本传入。