python基础三(深浅拷贝)

时间:2023-03-08 23:38:05
python基础三(深浅拷贝)

1.赋值操作

 list_1 = [1,2,3,['barry','Jerry']]
list_2 = list_1
list_1[0] = 111
print(list_1) # [111, 2, 3, ['barry', 'Jerry']]
print(list_2) # [111, 2, 3, ['barry', 'Jerry']]

对于赋值运算操作。list[1]与list[2]指向的是同一个内存地址。所以完全一样

2.浅拷贝

 # -------------浅拷贝----------------
# 对于浅拷贝而言。第一层的创建时新的内存地址。而从第二层开始指向的都是同一块内存地址
list_1 = [1,2,3,['barry','Jerry']]
list_2 = list_1.copy()
list_1[0] = 111
print(id(list_1[3])) # 40904072 同一块内存地址
print(id(list_2[3])) # 40904072 同上
print(list_1) # [111, 2, 3, ['barry', 'Jerry']]
print(list_2) # [1, 2, 3, ['barry', 'Jerry']]

对于浅拷贝而言。第一层创建时产生新的内存地址。而从第二层开始指向的都是同一块内存地址

3.深拷贝

 # -------------深拷贝----------------
import copy
list_1 = [1,2,3,['barry','Jerry']]
list_2 = copy.deepcopy(list_1)
list_1[3][0]=['Jack']
print(list_1) # [1, 2, 3, [['Jack'], 'Jerry']]
print(list_2) # [1, 2, 3, ['barry', 'Jerry']]

对于深拷贝而已。创建两个不同的内存地址。只是将list1 中的元素完整的拷贝一份给list2