再谈python的list类型参数及复制

由于python的特殊机制,在函数中使用list类型的参数时,实际上虚参与实参是通过地址传递的,即修改虚参的值,实际上就修改了实参的值,非常危险,所以尽量不要修改虚参的值。

在应用中还应该注意,不可以通过等号赋值(所谓浅复制)方式来隔断对虚参的修改,必须通过重新构建list的方式进行赋值(即所谓深复制)。

x1=[1,2]
y1=x1  #浅复制,
print(id(x1),id(y1))   #此时x1,y1地址相同
y1.append(0)           #此时x1,y1均为[1,2,0]
y1=[i for i in x1]     #深复制,利用列表推到式,很方便
print(id(x1),id(y1))   #此时x1,y1地址不同相同
y1.append(0)           #此时x1为[1,2],y1为[1,2,0]