21番茄网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 21番茄网
查看: 1182|回复: 0

Python 直接赋值、浅拷贝和深度拷贝解析

[复制链接]

650

主题

805

帖子

2706

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2706
发表于 2021-4-17 23:06:48 | 显示全部楼层 |阅读模式
Python 直接赋值、浅拷贝和深度拷贝解析

b = a: 赋值引用,a 和 b 都指向同一个对象。
Python 直接赋值、浅拷贝和深度拷贝解析  Python基础语法 230636z1eope7w1xfyz1oo

b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
Python 直接赋值、浅拷贝和深度拷贝解析  Python基础语法 230713zxyp2nfzgp23vf2p


b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。


Python 直接赋值、浅拷贝和深度拷贝解析  Python基础语法 230729pv0wg5fq6jm6fmgv
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象

b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝

a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象

print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )

#以上实例执行输出结果为:

#('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
#('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
#('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
#('d = ', [1, 2, 3, 4, ['a', 'b']])


注意:深拷贝,是要引入copy模块的

来自:https://www.runoob.com/w3cnote/p ... hallow-or-deep.html







上一篇:循环遍历时不能修改字典
下一篇:函数如引用可变参数时,最好用深拷贝复制一个出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|21番茄网 ( 粤ICP备10099428号 ) 奇远富

GMT+8, 2024-5-14 05:24 , Processed in 0.482864 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表