对象浅复制

本文通过Python代码示例,深入探讨了浅复制在列表中对于可变与不可变元素的影响,揭示了对象引用的特性及如何影响数据结构的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-

#浅复制
l1=[3,[55,44],(7,8,9)]
l2=list(l1)


print('id(l1[0]),id(l2[0]) :',id(l1[0]),id(l2[0]))
print('id(l1[1]),id(l2[1]) :',id(l1[1]),id(l2[1]))
print('id(l1[2]),id(l2[2]) :',id(l1[2]),id(l2[2]))
print('l2:',l2)

print('l1==l2:',l1==l2)
print('l2 is l1: ',l2 is l1)#l2 and l1 point to diff address

l1.append(100)#no influence to l2
l1[1].remove(55)#influence to l2

print('l1: ',l1)
print('l2: ',l2)

l2[1]+=[33,22]#influence to l1
l2[2]+=(10,11)#no influence to l1
print('l1: ',l1)
print('l2: ',l2)


print('id(l1[0]),id(l2[0]) :',id(l1[0]),id(l2[0]))
print('id(l1[1]),id(l2[1]) :',id(l1[1]),id(l2[1]))
print('id(l1[2]),id(l2[2]) :',id(l1[2]),id(l2[2]))

#综上所述,对于可变元素对象的可变元素,引用的地址是相同的,但是对于不可变元素,引用的地址是不同的,导致后面的修改会出现问题.



输出结果如下:
id(l1[0]),id(l2[0]) : 10919392 10919392
id(l1[1]),id(l2[1]) : 140211165347464 140211165347464
id(l1[2]),id(l2[2]) : 140211165654904 140211165654904
l2: [3, [55, 44], (7, 8, 9)]
l1==l2: True
l2 is l1:  False
l1:  [3, [44], (7, 8, 9), 100]
l2:  [3, [44], (7, 8, 9)]
l1:  [3, [44, 33, 22], (7, 8, 9), 100]
l2:  [3, [44, 33, 22], (7, 8, 9, 10, 11)]
id(l1[0]),id(l2[0]) : 10919392 10919392
id(l1[1]),id(l2[1]) : 140211165347464 140211165347464
id(l1[2]),id(l2[2]) : 140211165654904 140211166275456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值