a = [1,2]
b = a
python中所有的赋值语句都是引用, 可以理解为浅拷贝。
---------------------------------------------------------------------------------------------------------------------------------------------------------
想实现内存中内容的复制需要使用深拷贝。
-------------------------------------------------------------------------------------------------------------------
浅拷贝是引用;深拷贝不受原来数据的影响,因为它重新开辟了一段新的内存,重新拷贝了数据,而不是引用。
在运行的结果中,d 复制了c 的指向(a b 的引用,相当于拷贝快捷方式),但是拷贝后增加的内容不识别。
如果元组中只有普通的数据,copy.copy() copy.deepcopy()也是指向,因为元组是不可变类型。对于元组中有列表等可变类型,用cop还是引用,用deepcopy就是深拷贝。元组这样的不可变类型,deepcopy 认为复制另一份是不必要的,所以也是引用。总结来说,copy.copy 是浅拷贝,拷贝它的上一层,deepcopy 是递归拷贝。
如图: c = [a,b]
d = copy.copy(c) 以后改变c,d 不变。 d = c[:] 与d = copy.copy(c)一样是浅拷贝。
dict中的value 值并不在字典里面存着,而存着它的引用。 运用hash 的方式,通过key ,找到value的值,所以只有一份value, copy.copy() 也是深拷贝。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在list传递参数的时候需要注意,是否需要改变原来列表的内容。python中,传递实参的时候,是赋值,传递的是引用浅拷贝 。