首页 > 其他 > 详细

深浅拷贝

时间:2020-05-31 22:26:59      阅读:62      评论:0      收藏:0      [点我收藏+]

赋值、拷贝

  • 针对不可变对象

    赋值操作、浅拷贝、深拷贝不会申请单独的内存空间,只会记录不可变对象的引用次数

    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)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!