# -*- 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
对象浅复制
最新推荐文章于 2022-06-12 17:25:29 发布