由于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]
原文:https://www.cnblogs.com/imhuanxi/p/11222878.html