首先我们要了解一下浅拷贝和深拷贝的概念:
定义:浅拷贝是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。
注:仅仅拷贝的是目标变量的所在地址,目标变量的所在地址不发生任何变化。
实际上,变量中并没有存储任何的值,它只是指向了一个内存地址,而这个地址里存储着具体的内容,例如把变量a赋值给变量b的时候,实际上是把a指向内存中某对象的链接赋给了b,也就是说,现在a和b都指向了同一个对象。因此,在改变了内存中array的值后,而a与b都引用了该array对象,所以都一起发生了变化
定义:一个变量对另外一个变量的值拷贝。
注:拷贝的是目标变量的值,是真实的拷贝,新的变量产生了新的内存地址。
直接赋值给另一个变量是 浅拷贝
切片操作 是 深拷贝
#Python中的浅拷贝 a = [1,2,3,4,5,6] b = a #a直接赋值b print('a的初始内存地址:',id(a)) print('b的初始内存地址:',id(b)) b.append(7)#对b尾部加数字7 print('a:',a) print('b:',b) print('a的当前内存地址:',id(a)) print('b的当前内存地址:',id(b)) print('-----------------------------') c = a[0:3] # c使用切片进行拷贝 c.append(8)#在c的尾部添加数字8 a.append(9) print('a:',a) print('b:',b) print('c:',c) print('a的内存地址:',id(a)) print('b的内存地址:',id(b)) print('c的内存地址:',id(c))#打印c的内存地址 """ a的初始内存地址: 2186126011016 b的初始内存地址: 2186126011016 a: [1, 2, 3, 4, 5, 6, 7] b: [1, 2, 3, 4, 5, 6, 7] a的当前内存地址: 2186126011016 b的当前内存地址: 2186126011016 ----------------------------- a: [1, 2, 3, 4, 5, 6, 7, 9] b: [1, 2, 3, 4, 5, 6, 7, 9] c: [1, 2, 3, 8] a的内存地址: 2186126011016 b的内存地址: 2186126011016 c的内存地址: 2186126011976 """显然浅拷贝后变量的存放地址相同,仅仅是拷贝到内存地址,且其中一个变量发生增删等操作会直接改变目标变量的值;
深拷贝后变量的存放地址不同,说明另外开辟了新的内存空间存放拷贝后的变量,且其中一个变量的增删操作不会不会对其余的变量产生影响。