码迷,mamicode.com
首页 > 编程语言 > 详细

python的深拷贝与浅拷贝

时间:2018-09-16 21:06:23      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:总结   拷贝   直接   切片   列表   日常   port   深拷贝   空间   

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的深拷贝与浅拷贝

标签:总结   拷贝   直接   切片   列表   日常   port   深拷贝   空间   

原文地址:https://www.cnblogs.com/python-only/p/9657117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!