细说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的第二层数据也跟着改变,因为只拷贝成功了第一层,他们还共同引用第二次层的数据

深拷贝

 

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

 

 

 

   

posted @ 2019-10-21 16:51  自动化前行者  阅读(226)  评论(0编辑  收藏  举报