python的深拷贝与浅拷贝

Posted python-only

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。

a = [1,2,3,4,5,6,[7,8]]

浅拷贝(四种方法)

b = a  # 直接赋值

c = a[:] # 整体切片

d = list(a) # 工厂函数

import copy # copy库的浅拷贝函数
e = copy.copy(a)

深拷贝(一种方法)

import copy  #copy库的深拷贝函数
d = copy.deepcopy(a)

总结:
# 深拷贝非常好理解,就是拷贝过来后,两者互不相干,互不影响;
# 浅拷贝的理解就复杂一些了
1.首先对于直接赋值,其实就相当于给原来存数据的内存地址多加了一个名字,a跟b的内存地址是一样的,两者共用一个数据,所以无论对哪一个进行改动,所有都会改变
2.再是对于整体切片,工厂函数浅拷贝函数来说,这些都是开辟了新的内存空间,然后各自都是相互独立的,无论怎么改变都是互不影响的(前提:只改变拷贝的第一层)
3.【补充】
什么叫:只改变拷贝的第一层呢,就是a中的1,2,3,4,5,6改了就改了,而如果你要动7和8,那么c,d,e也会跟着改,即a[x]互不影响,a[x][y]互相影响
   也就是说,对于只有一层的列表,那么,b,d,e就是‘深拷贝’,但是由于列表不是固定的,所以当你真的需要copy时,还是老老实实用deepcopy,因为这个拷贝才符合我们对于【复制】的日常理解

以上是关于python的深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

python的深拷贝与浅拷贝

python中的深拷贝与浅拷贝

[随笔重写] Python3 的深拷贝与浅拷贝

Python中的深拷贝与浅拷贝

Python中的深拷贝与浅拷贝

python的深拷贝与浅拷贝