赋值:多个变量名指向同一个内存地址
#情况1
a = 10
b = 10
c = 10
#情况2
a = 10
b = a
c = b
在程序这样写,内容空间发生的变化就是下图:
lst = [1,2,3,[6,7,8]]
赋值:
#元素的添加对赋值对象都有影响
lst1 = lst
lst[-1].append(9)
一个列表用两个标签,通过标签lst 和lst1找到的是同一个,图中的那一长串数字就是内存地址,Python中是通过内存地址来查看值的;我们通过lst这个标签添加一个9,再通过lst1找到这个列表也就多了一个9 因为lst和lst1都是贴在一个地方
浅拷贝:
浅拷贝就是只拷贝第一层的元素,浅拷贝只把原列表中记录的内存地址拿到一个新开辟的列表中
lst = [1,2,3,[6,7,8]]
#lst2 = lst[:] 浅拷贝的另一种书写形式
lst2 = lst.copy()
lst.append(9)
#执行如下代码,元素的添加对浅拷贝对象的第一层没有影响
lst = [1,2,3,[4,5,6]]
lst1 = lst.copy() #浅拷贝
lst.append(7)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6], 7] [1, 2, 3, [4, 5, 6]]
lst[-2].append(8)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6, 8], 7] [1, 2, 3, [4, 5, 6, 8]]
深拷贝:
import copy
lst = [1,2,3,[6,7,8,9]]
lst2 = copy.deepcopy(lst)
#执行如下代码,元素的添加对深拷贝对象都没有影响
import copy
lst = [1,2,3,[4,5,6]]
lst1 = copy.deepcopy(lst) #深拷贝
lst.append(7)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6], 7] [1, 2, 3, [4, 5, 6]]
lst[-2].append(8)
print(lst,lst1)
结果:
[1, 2, 3, [4, 5, 6, 8], 7] [1, 2, 3, [4, 5, 6]]
标签:copy,lst1,lst,拷贝,内存地址,append
From: https://www.cnblogs.com/vahan/p/16872708.html