细说python中的深、浅拷贝与copy模块

邮差的信 提交于 2019-12-01 19:28:49

=赋值:数据完全共享(=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变

如果是不可变类型(immutable),比如字符串,修改了其中一个,另一个并不会变

a='123'
b=a
id(a)
id(b)
a='1'
print a #为1
print b #为123id(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的第二层数据也跟着改变,因为只拷贝成功了第一层,他们还共同引用第二次层的数据

深拷贝

 

     数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)

 

 

 

   

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!