tmp1=tmp2
这样的赋值操作是引用复制(reference copy),而不是深拷贝或浅拷贝。如果tmp是可变的变量,对其中一个的更改会影响到另一个
浅拷贝
浅拷贝创建了一个新的对象,但只复制了原始对象的顶层元素,而不复制嵌套对象
使用copy
方法
更改其中一个变量的顶层元素不会影响到另一个变量
但如果更改嵌套对象,就会对另一个tmp产生影响
使用copy
模块的copy
函数
效果同上面的copy方法
使用切片(对于可切片对象,如list或字符串)
效果同上
即使只切片了一部分,并未拷贝整个变量,修改其中一个也会对另一个tmp产生影响
深拷贝
深拷贝创建了一个新的对象,并递归复制了原始对象及其所有嵌套对象。深拷贝可以使用 copy
模块的 deepcopy
函数完成
深拷贝后修改嵌套对象也不会对另一个tmp产生影响
因为深拷贝浅拷贝出的bug看起来真的有点灵异。。。
一些学Python的时候只粗粗学了个语法的恶果