码迷,mamicode.com
首页 > 编程语言 > 详细

python深拷贝和浅拷贝

时间:2019-10-01 00:07:26      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:import   相等   http   数据   python深拷贝   class   png   com   append   

  • 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, 2, 3], [3, 4]]    # 浅拷贝
>>> d
[[1, 2], [3, 4]]       # 深拷贝


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


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

技术图片

python深拷贝和浅拷贝

标签:import   相等   http   数据   python深拷贝   class   png   com   append   

原文地址:https://www.cnblogs.com/ericccc/p/11613968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!