【发布时间】:2019-07-17 12:32:24
【问题描述】:
我正在尝试对可变和不可变类型的普通复制(赋值)、浅复制和深复制概念进行尝试。
List 是可变的 - 因此当分配给另一个对象时,对另一个对象的任何附加(或使用索引值更改值)都会影响原始对象。对新对象的分配不会影响原始对象。
String 是不可变的 - 因此当分配给另一个对象时,对另一个对象的任何更改,无论是修改还是分配都不会影响原始对象。
我想知道是否可以使用浅拷贝概念来使字符串行为可变和列表不可变。从下面的实验中,我注意到字符串对象(不可变)上的浅/深复制不会影响其不可变行为。列表对象的浅/深副本(可变)使其不可变。
请您对此有所了解。
import copy
print('----------LIST BEHAVIOUR - MUTABLE----------')
l1=[1,2,3]
print(l1)
l2=l1
print(l2)
l2[2]=10
l2.append(22)
print(l2)
print(l1)
print('----------LIST SHALLOW COPY----------')
l1=[1,2,3]
print(l1)
l2=copy.copy(l1)
print(l2)
l2[2]=10
l2.append(22)
print(l2)
print(l1)
print('----------LIST DEEP COPY----------')
l1=[1,2,3]
print(l1)
l2=copy.deepcopy(l1)
print(l2)
l2[2]=10
l2.append(22)
print(l2)
print(l1)
print('----------STRING BEHAVIOUR - IMMUTABLE----------')
str1='abc'
print(str1)
str2=str1
print(str2)
str2='xyz'
print(str2)
print(str1)
print('----------STRING SHALLOW COPY----------')
str1='abc'
print(str1)
str2=copy.copy(str1)
print(str2)
str2='xyz'
print(str2)
print(str1)
print('----------STRING DEEP COPY----------')
str1='abc'
print(str1)
str2=copy.copy(str1)
print(str2)
str2='xyz'
print(str2)
print(str1)
输出:
----------LIST BEHAVIOUR - MUTABLE----------
[1, 2, 3]
[1, 2, 3]
[1, 2, 10, 22]
[1, 2, 10, 22]
----------LIST SHALLOW COPY----------
[1, 2, 3]
[1, 2, 3]
[1, 2, 10, 22]
[1, 2, 3]
----------LIST DEEP COPY----------
[1, 2, 3]
[1, 2, 3]
[1, 2, 10, 22]
[1, 2, 3]
----------STRING BEHAVIOUR - IMMUTABLE----------
abc
abc
xyz
abc
----------STRING SHALLOW COPY----------
abc
abc
xyz
abc
----------STRING DEEP COPY----------
abc
abc
xyz
abc
【问题讨论】:
标签: python