python 的深浅copy 与 赋值

赋值

对于赋值运算,就是共同指向一个内存地址,将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址。

如果值是可变类型那么内存地址不会变
s1 = 'alex'
s2 = s1   # 赋值
>>> print(s1,s2)
alex 6643192
alex 6643192
当值是可变类型时
s1 = []
s2 = s1
s2.append("a")
>>> print(s1,id(s1))
>>> print(s2,id(s2))
['a'] 12194696
['a'] 12194696

深浅copy

浅层copy 拷贝第一层的数据独立,第二层及以后公用一个内存地址

#copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)   #在第一层里添加数据
>>> print(l1,id(l1))
>>> print(l2,id(l2))
[1,2,3,666] 7410568
[1,2,3] 7392688

l1 = [1,[22,33],2,3]
l2 = l1.copy()
l1[1].append(666)   #在第二层添加数据
>>> print(l1,id(l1))
>>> print(l2,id(l2))
[1,[22,33,666],2,3] 7411700
[1,[22,33,666],2,3] 7411700

深层copy 要引用模块 import copy 对于深copy,无论多少层,在内存中都是两个独立的内存地址

import copy
l1 = [1,[22,33,],2,3]
l2 = copy.deepcopy(l1)
l1.append(777)
l1[1].append(666)
>>> print(l1,id(l1),id(l1[1]))
>>> print(l2,id(l2),id(l2[1]))
[1,[22,33,666],2,3,777] 12617032 12618824
[1,[22,33],2,3] 12617544 12618888
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容