深拷贝 和 浅拷贝

深拷贝 和 浅拷贝

a = 19
b = a
print(id(b),id(a))
a = 20
print(b)

lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)

(1) 浅拷贝 (只拷贝一级所有的元素,其他层级延续以前的数据)

方法一

lst = [1,2,3]
lst2 = lst.copy()
lst.append(5)
print(lst)  # [1, 2, 3, 5]
print(lst2) # [1, 2, 3]

lst2[0] = 2
print( id(lst[0]))
print( id(lst2[0]))

方法二 (推荐)

import copy 
lst = [1,2,3]
"""copy.copy()  copy模块.copy函数()"""
lst2 = copy.copy(lst)
lst.append(10)
print(lst)
print(lst2)

(2) 深拷贝 (所有层级的元素都单独拷贝一份,形成独立的副本)

'''# 深拷贝语法 copy.deepcopy()'''
lst = [1,2,3,[4,5,6]]
lst2 = copy.deepcopy(lst)
# lst[-1].append(888)
print(lst)
print(lst2)

print(id(lst[-1])  ,  id(lst2[-1]))

深拷贝可以应用在字典当中

dic = {"a":1,"b":[1,2,3]}
dic2 = copy.deepcopy(dic)
dic["b"].append(4)
print(dic)
print(dic2)

copy 和 deepcopy 谁更快 浅拷贝更快~

浅拷贝: 只拷贝第一层级所有的元素, copy.copy()
深拷贝: 拷贝所有层级的元素,都单独开启新的空间 copy.deepcopy()
(地址:[不可变数据]会暂时指向原数据,[可变数据]会独立开辟新空间)

可变数据: list set dict

不可变数据: int float bool complex str tuple

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页