Python中的直接赋值、浅拷贝、深拷贝

先看一段程序

import copy


a = [1, 2, 3]
b = [1, 2, 3, a]        # [1, 2, 3, [1, 2, 3]]

x = b                   # 直接赋值
y = b.copy()            # 浅拷贝
z = copy.deepcopy(b)    # 深拷贝

# 先对b做直接修改
b.append(111)
print("x: %s" % x, "y: %s" % y, "z: %s" % z, sep="\n")
# x: [1, 2, 3, [1, 2, 3], 111]
# y: [1, 2, 3, [1, 2, 3]]
# z: [1, 2, 3, [1, 2, 3]]

# 再对b内的子对象a做修改
a.append(125)
print("x: %s" % x, "y: %s" % y, "z: %s" % z, sep="\n")
# x: [1, 2, 3, [1, 2, 3, 125], 111]
# y: [1, 2, 3, [1, 2, 3, 125]]
# z: [1, 2, 3, [1, 2, 3]]

直接赋值

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用,实际上指向的还是同一个对象

浅拷贝

拷贝父对象,但不会拷贝对象内部的子对象,也就是只复制可变对象b本身,内部的可变对象a还指向同一个

深拷贝

会在内存中复制出一个新的对象

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容