列表深浅copy

# 前缀:
# 1. 对于赋值运算来说,指向的都是同一个内存地址,一变都变。
# l1 = [1, 2, 3]
# l2 = l1
# l3 = l2
# l3.append(666) #对l3增加一个元素,l1和l2也都增加了
# print(id(l1),id(l2),id(l3)) #三个的内存地址相同
# print(l1, l2, l3)

# 结果:1414378562376 1414378562376 1414378562376
# [1, 2, 3, 666] [1, 2, 3, 666] [1, 2, 3, 666]

# 把Word里的图加上

# 浅copy :对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始
# 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
# l1=[11,22,33]
# l2=l1.copy()
# print(l1,l2)
# print(id(l1),id(l2))
# 结果:[11, 22, 33] [11, 22, 33]
# 2297283420872 2297283421000

# l1=[11,22,33]
# l2=l1.copy()
# l1.append(666)
# print(l1,l2)
# print(id(l1),id(l2))
# 结果:[11, 22, 33, 666] [11, 22, 33]
# 2091097989832 2091097989960


# l1 = [11, 22, [55, 66], [11, 22]]
# l2 = l1.copy()
# l1[2].append('小米') #在其中的一个列表添加二层及二层以上的元素是时,
# print(l1,l2) 另外的列表也自动添加了,因为是同一个内存地址
# print(id(l1),id(l2)) #这两者的内存地址不同 (一层)
# print(id(l1[2]),id(l2[2])) #这两者的内存地址相同 (二层或二层以上)
# 结果:[11, 22, [55, 66, '小米'], [11, 22]] [11, 22, [55, 66, '小米'], [11, 22]]
# 2235139611016 2235139610312
# 2235138777800 2235138777800
# 增加图片QQ里找

# 深copy deepcopy() 完全独立(每一层都是独立的,不同的内存地址)

# 一层是不同的内存地址
# from copy import deepcopy #调用深copy
# l1 = [11, 22, ['小粉嫩', 66], [11, '王大锤']]
# l2 =deepcopy(l1)
# l2.append('苍老师')
# print(l1,id(l1))
# print(l2,id(l2))

# 或者:
# import copy #调用深copy
# l1 = [11, 22, ['小粉嫩', 66], [11, '王大锤']]
# l2 =copy.deepcopy(l1) #注意写法
# l2.append('苍老师')
# print(l1,id(l1))
# print(l2,id(l2))
# 结果:[11, 22, ['小粉嫩', 66], [11, '王大锤']] 2121711904584
# [11, 22, ['小粉嫩', 66], [11, '王大锤'], '苍老师'] 2121711904520

# 二层及以上,也是不同的内存地址
# import copy #调用深copy
# l1 = [11, 22, ['小粉嫩', 66], [11, '王大锤']]
# l2 =copy.deepcopy(l1) #注意写法
# l1[-1].append('黑旋风')
# print(l1[-1],id(l1[-1]))
# print(l2[-1],id(l2[-1]))
# 结果:[11, '王大锤', '黑旋风'] 2212367786568
# [11, '王大锤'] 2212367787592



# 补充:
# s1 = 'alex'
# s2 = 'alex'
# 由于小数据池的概念,s1,s2,是同一个内存地址


# l1 = [1, 2, 3]
# l2 = [1, 2, 3]
# 这两个是不同的内存地址


# 对于切片来说,这是浅copy。
l1 = [1, 2, 3, 4, 5, 6, [11,22]]
l2 = l1[:]
# l1.append(666)
# print(l1, l2)
# print(id(l1),id(l2))

# l1 = [1, 2, 3, 4, 5, 6, [11,22]]
# l2 = l1[:]
# l1[-1].append(666)
# print(l1, l2)
# print(id(l1[-1]), id(l2[-1]))
# 结果:[1, 2, 3, 4, 5, 6, [11, 22, 666]] [1, 2, 3, 4, 5, 6, [11, 22, 666]]
# 2880614507208 2880614507208

猜你喜欢

转载自www.cnblogs.com/gssss/p/9004937.html