文字描述:
赋值: 相当于把为对象增添了一个名字,并没有创建一个新对象。
shallow copy: 创建了一个新的对象,并对对象的一级目录(最外层目录)进行了copy,当试图修改嵌套
目录时,父本也会随之改变。
deepcopy:类似于windows的复制,无论如何修改,父本也不会改变。
代码:
# id值
a = [1,2,3,[4,5]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
id(a),id(b),id(c),id(d)
(130476552, 130476552, 130476472, 130476352)
由代码可以清楚地了解,赋值之后ID值一样而shallow copy 和 deepcopy 的ID值都已经改变。
# 在最外层列表增加值
a.append(6)
b # 赋值
[1, 2, 3, [4, 5], 6]
c # shallow copy
[1, 2, 3, [4, 5]]
d # deepcopy
[1, 2, 3, [4, 5]]
往最外层列表添加值时,shallow copy和deepcopy不会改变。
# 在嵌套列表增添值
a[3].append(7)
b # 赋值
[1, 2, 3, [4, 5, 7], 6]
c # shallow copy
[1, 2, 3, [4, 5, 7]]
d # deepcopy
[1, 2, 3, [4, 5]]
在内层列表增添值时,shallow copy会改变,deepcopy不会改变。
由于shallow copy在复制时,只复制了最外层,而子对象并没有复制,与父本共享子对象,就导致了当父本修改子对象时,shallow copy也随之改变。
网友评论