加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python深拷贝和浅拷贝

发布时间:2020-12-20 10:27:14 所属栏目:Python 来源:网络整理
导读:is 比较两个引用是否指向同一个对象 == 比较两个对象是否相等 a = [1,2] b = [1,2] c = a id(a)140275902517640 id(b)140275902517960 id(c)140275902517640 a == b # a、b分别指向的对象值相等True a is b # a、b分别指向不同的对象 False a is c # a、c指
  • is 比较两个引用是否指向同一个对象
  • == 比较两个对象是否相等
>>> a = [1,2]
>>> b = [1,2]
>>> c = a
>>> id(a)
140275902517640
>>> id(b)
140275902517960
>>> id(c)
140275902517640
>>> a == b      # a、b分别指向的对象值相等
True
>>> a is b      # a、b分别指向不同的对象 
False
>>> a is c       # a、c指向同一个对象
True
  • 深拷贝:复制了引用和内容
  • 浅拷贝: 仅复制了引用,未复制对象
# 浅拷贝 a、b指向同一个对象地址
>>> a = [1,2]
>>> b = a
>>> id(a)
140275902517704
>>> id(b)
140275902517704
>>> a.append(3)   # 浅拷贝,修改a的值,b的值随之变化   【图1】
>>> b
[1,2,3]


# 深拷贝
>>> import copy
>>> c = copy.deepcopy(a)
>>> id(a)
140275902517704
>>> id(c)
140275902301264
>>> a.append(3)   # 深拷贝,修改a的值,c的值不变     【图2】
>>> c
[1,2]


>>> a = [1,2]                                    # 【图3】
>>> b = [3,4]
>>> c = [a,b]
>>> d = copy.deepcopy(c)
>>> d
[[1,2],[3,4]]
>>> a.append(3)
>>> c
[[1,3],4]]    # 浅拷贝
>>> d
[[1,4]]       # 深拷贝


>>> a = [1,2]                                    # 【图4】
>>> b = [3,b]
>>> d = copy.copy(c)
>>> d
[[1,4]]
>>> a[0] = 0
>>> d
[[0,4]]


# copy当拷贝一个不可变类型数据时,只会进行浅拷贝
a = [1,2]
b = [3,4]
c = (a,b)
d = copy.copy(c)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读