深浅拷贝
时间:2020-05-31 22:26:59
收藏:0
阅读:63
赋值、拷贝
-
针对不可变对象
赋值操作、浅拷贝、深拷贝不会申请单独的内存空间,只会记录不可变对象的引用次数
Python中,对象的赋值都是进行对象引用(内存地址)传递
-
针对可变对象
- 赋值不会申请内存空间,引用原对象
- 浅拷贝会申请新的内存空间,创建新的对象,但是,对于对象中的元素,浅拷贝会使用原始元素的引用(内存地址)。
- 深拷贝会申请新的内存空间,对于对象中的元素,深拷贝都会重新生成一份,原对象元素改变,不会影响拷贝对象元素。
赋值:是对象引用传递,原对象元素改变,拷贝对象元素改变。
copy.copy():浅拷贝,一层拷贝,会重新申请内存空间,拷贝对象的元素仍使用原对象元素的引用。
copy.deepcopy():深拷贝,完全拷贝,会重新申请内存空间,原对象元素的改变不影响拷贝对象元素。
import copy
s1 = [[1000, 200], ‘aliba‘]
s2 = s1.copy()
s1[1] = ‘alvin‘
print(s1)
print(s2) #s2不变
# [[1000, 200], ‘alvin‘]
# [[1000, 200], ‘aliba‘]
s1[0][0] = 1500
print(s1)
print(s2) #s2改变
# [[1500, 200], ‘alvin‘]
# [[1500, 200], ‘aliba‘]
s3 = copy.deepcopy(s1)
s3[1] = ‘alisa‘
s3[0][1] = 500
print(s1)
print(s2)
print(s3)
# [[1500, 200], ‘alvin‘]
# [[1500, 200], ‘aliba‘]
# [[1500, 500], ‘alisa‘]
原文:https://www.cnblogs.com/gugu-da/p/13021821.html
评论(0)