拷贝

可变

可 变:值变id不变

不可变:值变id也变

age=18
print(id(age))
age=19
print(id(age))#不可变
140735591015752
140735591015784

拷贝

如果r2是r1的拷贝对象,则r1内部任何数据类型的元素变化,r2内部的元素也会跟着改变,因为可变类型值变id不变.

r1=['a','b']
r2=r1
r1.append('7')
print(r1)
print(r2)
['a', 'b', '7']
['a', 'b', '7']

浅拷贝

如果r2是r1的浅拷贝对象,r1内部的不可变元素发生了改变,r2不变,如果r1内的可变元素发生了改变,则r2会跟着改变.

import copy
r1=['1','2','3',['a','b']]
r2=copy.copy(r1)
r1.append('9')
print(r1)
print(r2)
['1', '2', '3', ['a', 'b'], '9']
['1', '2', '3', ['a', 'b']]
r1[3].append('m')
print(r1)
print(r2)#列表为可变元素
['1', '2', '3', ['a', 'b', 'm'], '9']
['1', '2', '3', ['a', 'b', 'm']]

深拷贝

如果r2是r1的深拷贝对象,r1内的元素发生了变化,r2都不会改变

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)

l1.append('g')

print(l1)
print(l2)
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]
l1[3].append('g')

print(l1)
print(l2)
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]


posted @ 2024-02-04 21:30  泥跟沃丸吗  阅读(18)  评论(0编辑  收藏  举报