2018-10-10 Copy

文字描述:

赋值: 相当于把为对象增添了一个名字,并没有创建一个新对象。

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也随之改变。

你可能感兴趣的:(2018-10-10 Copy)