欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python之深浅拷贝

程序员文章站 2022-03-13 16:53:23
...


)

一、浅拷贝

1、浅拷贝的定义

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是
同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

2、浅拷贝的使用

首先要使用拷贝, 我们需要先导入copy模块, 浅拷贝的使用方法如下:
print('浅拷贝')
c = [[7, 8, 9], [6, 5, 4]]
d = copy.copy(c)
浅拷贝的时候,拷贝了引用,并没有拷贝内容
print('浅拷贝')
c = [[7, 8, 9], [6, 5, 4]]
d = copy.copy(c)
print(id(c), c)     # 2438811043648 [[7, 8, 9], [6, 5, 4]]
print(id(d), d)     # 2438813546176 [[7, 8, 9], [6, 5, 4]]
c[0][1] = 0
print(id(c), c)     # 2438811043648 [[7, 0, 9], [6, 5, 4]]
print(id(d), d)     # 2438813546176 [[7, 0, 9], [6, 5, 4]]
因为是拷贝的引用, 所以在进行浅拷贝的时候, 被拷贝对象的第二层改变,
 拷贝对象也会改变

python之深浅拷贝因为是引用的一个值所以当被拷贝,拷贝对象的值也会改变

二、深拷贝

1、深拷贝的定义

嵌套的可变数据类型重新开辟一块内存空间。

2、深拷贝使用

深拷贝的方法如下:
print('深拷贝')
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
深拷贝是对于一个对象所有层次的拷贝
print('深拷贝')
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
print(id(a), a)     # 2102925437760 [[1, 2, 3], [4, 5, 6]]
print(id(b), b)     # 2102925504192 [[1, 2, 3], [4, 5, 6]]
a[1][1] = 9
print(id(a), a)     # 2102925437760 [[1, 2, 3], [4, 9, 6]]
print(id(b), b)     # 2102925504192 [[1, 2, 3], [4, 5, 6]]
因为深拷贝字拷贝的时候是重新开辟的内存空间去吧值复制了,
所以当被拷贝对象那个改变时不会影响拷贝对象

python之深浅拷贝
因为开辟了新的内存空间,并且储存的是开始的被拷贝对象的值, 所以在拷贝后被拷贝对象的值改变,不会影响到拷贝对象

深浅拷贝的区别

1、如果用copy.copy、copy.deepcopy对一个全部都是不可变类型的数据
进行拷贝,那么它们结果相同,都是引用指向;
2、如果拷贝的是一个拥有不可变类型的数据,即使元组是最顶层,那
么deepcopy依然是深拷贝,而copy.copy还是指向

3、基本上只要不是我们自已手动调用的deepcopy方法都是浅拷贝,切片拷贝
字典拷贝都是浅拷贝,而有些内置函数可以生成拷贝(list),属于深拷贝:
a = list(range(10))b = list(a) 
相关标签: 1024程序员节