无名 发表于 2022-5-8 18:33:44

【HC】Python深浅copy


深浅copy
数据类型的分类

可变(不可哈希)的:list dict set
不可变(可哈希)的:str bool int tuple
浅copy:
会在内存中新开辟一个空间,存放这个copy的列表,但是列表里的内容还是沿用之前对象的内存地址。所以尽管l1,l2的id不同,但是内容id是相同的。

#浅拷贝
l1 = ]
l2 = l1.copy()
print(id(l1))
print(id(l2))
l1.append(88)
print(l1)
print(l2)
print("-----给列表里的小列表添加值------")
print(id(l1))
print(id(l2))
l2[-1].append("哈哈哈")
print(l1)
print(l2)

1979862092936
1979865206344
, 88]
]
-----给列表里的小列表添加值------
1979865206472
1979865206472
, 88]
]
http://cdn.u1.huluxia.com/g3/M02/6A/AF/wKgBOV3mf_eAdFP5AABMAAskODo451.jpg

#切片也是浅copy
l1 = ]
l2 = l1[:]
l1[-1].append("哈哈")
print(l1)
print(l2)

]
]
1
2
深copy:
会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变的数据类型则沿用之前的

#深copy
import copy
l1 = ]
l2 = copy.deepcopy(l1)
print(id(l1))
print(id(l2))
print(id(l1),id(l2))    # 不可变的数据类型则沿用之前的,所以id相同
print(id(l1[-1]),id(l2[-1])) #可变的数据类型在内存中重新创建一份,所以id不同
l1[-1].append("哈哈哈")
print(l1)
print(l2)

1490814040776
1490814773896
140707873329984 140707873329984
1490813655816 1490814040584
]
]
http://cdn.u1.huluxia.com/g3/M02/6A/AF/wKgBOV3mf_iAVImoAABIAAsI0NM313.jpg

区别:

浅copy:list dict:嵌套的可变的数据类型是同一个。

深copy:list dict:嵌套的可变的数据类型不是同一个。
http://cdn.u1.huluxia.com/g3/M02/6A/AF/wKgBOV3mf_iAKxDlAAFAIevZ-vc650.jpg
页: [1]
查看完整版本: 【HC】Python深浅copy