Python 直接赋值、浅拷贝和深度拷贝区别

枫铃3年前 (2021-07-11)Python257

b = a: 赋值引用,a 和 b 都指向同一个对象。
在这里插入图片描述
b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向同一对象(是引用)
在这里插入图片描述

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a = {1: [1, 2, 4]}
b = a.copy()
print(a, b)
# 输出: {1: [1, 2, 4]} {1: [1, 2, 4]}

a[1].append(4)
print(a, b)
# 输出:{1: [1, 2, 4, 4]} {1: [1, 2, 4, 4]}
# 由于a和b的子对象仍然是指向同一对象,对a的子对象的修改等于对b子对象的修改

a[2] = 'abc'
print(a, b)
# 输出:{1: [1, 2, 4, 4], 2: 'abc'} {1: [1, 2, 4, 4]}

b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
在这里插入图片描述

import copy
a = {1: [1, 2, 4]}
c = copy.deepcopy(a)
print(a, c)
# 输出:{1: [1, 2, 4]} {1: [1, 2, 4]}
a[1].append(5)
print(a, c)
# 输出:{1: [1, 2, 4, 5]} {1: [1, 2, 4]}

相关文章

Python with as 用法

With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的wi...

Django中cookie和session的存、取、删除

Django中: cookie的存: response = HttpResponse('登陆成功')...

Python中map和reduce函数?

1.从参数方面来讲&#x...

Python老司机给上路新手的3点忠告

Python老司机给上路新手的3点忠告

在你学习编程的过程中,是否有过以下经历,或正在面临类似的局面: ● 网上找了很多资料,不知道从哪里看...

Python实现屏幕截图的两种方式

使用windows API使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释。 一、Python调用windows API实现屏幕截...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。