细说python中的深、浅拷贝与copy模块
=赋值:数据完全共享(=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变
如果是不可变类型(immutable),比如字符串,修改了其中一个,另一个并不会变
a='123' b=a id(a) id(b) a='1' print a #为1 print b #为123
id(a)
id(b)
内存地址不同了 a在内存中的引用对象变更了
如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变
a=[1,2,3,4] b=a print a print b
这个时候a与b相同 a[1]=4 print a #[1,4,3,4] print b #[1,4,3,4]
这个时候变量a改变了,变量 b也同时跟着改变
浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)(如果数据内层改变,拷贝的数据也跟着改变)
例子:a=[1,2,3,4,[1,2,3]]
b=a
id(a)!=id(b)#复制其数据独立内存存放,但是只拷贝成功第一层
a[1]=3
因为第一层拷贝成功,a 改变,b不改变
a[4][1]=2 这次变量a发生了改变,变量b的第二层数据也跟着改变,因为只拷贝成功了第一层,他们还共同引用第二次层的数据
深拷贝
数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)