python赋值、深浅拷贝和重复

本文介绍了Python中列表复制的两种方式:简单重复与列表引用,以及浅拷贝和深拷贝的区别。通过示例展示了如何使用`copy`模块进行深拷贝,强调了浅拷贝在面对子对象修改时的特性,并讨论了赋值、浅拷贝和深拷贝在对象引用上的不同行为。
摘要由CSDN通过智能技术生成

赋值

传个引用(相当于多了个别名)

重复

深层重复使用的是引用

L=[4,5,6]
X=L*2//简单重复非引用
Y=[L]*2 //列表的引用
 
//X=[4,5,6,4,5,6]
//Y=[[4,5,6],[4,5,6]]
 
L[1]=0
 
//X=[4,5,6,4,5,6]  没有改变
//Y=[[4,0,5],[4,0,5]] 因为是列表的引用所以改变了

copy

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

b = a[:]是浅copy

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
    例:
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对于父对象的修改不会改变复制后的对象;但是对于子对象的修改会改变复制后的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值