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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 1、亲密关系中“感觉总是被否定其实是自己不确定,自己不同意。” 这次我说过年要去印度参加游学,老公立马说不行,那儿...
    Lynn111阅读 624评论 0 2
  • 人生若是无悔,那该是多无趣啊 ——宫二
    我爱蒸饺子阅读 157评论 0 0
  • 看一看窗外的天 是几月的星星和月亮 还有知了和黄鹂 看一看星星和月亮 是哪年的亮光和阴影 还有斑点和划痕 看一看知...
    秋枫愉夜客阅读 207评论 0 0