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

完全理解python深拷贝和浅拷贝

时间:2014-07-29 22:13:02      阅读:470      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   io   2014   line   python   

   import copy
bubuko.com,布布扣
= [1234, [ab]]  #原始对象
bubuko.com,布布扣

bubuko.com,布布扣
= a  #赋值,传对象的引用
bubuko.com,布布扣
= copy.copy(a)  #对象拷贝,浅拷贝
bubuko.com,布布扣
= copy.deepcopy(a)  #对象拷贝,深拷贝
bubuko.com,布布扣

bubuko.com,布布扣a.append(
5)  #修改对象a
bubuko.com,布布扣
a[4].append(c)  #修改对象a中的[‘a‘, ‘b‘]数组对象
bubuko.com,布布扣

bubuko.com,布布扣
print a = , a
bubuko.com,布布扣
print b = , b
bubuko.com,布布扣
print c = , c
bubuko.com,布布扣
print d = , d


输出结果:
a =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
b =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
c =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘]]
d =  [1, 2, 3, 4, [‘a‘, ‘b‘]]

再来了解一下怎么copy的。

   import copy
bubuko.com,布布扣
= [1234, [ab]]  #原始对象
bubuko.com,布布扣

bubuko.com,布布扣
= a  #赋值,传对象的引用
bubuko.com,布布扣
= copy.copy(a)  #对象拷贝,浅拷贝
bubuko.com,布布扣
= copy.deepcopy(a)  #对象拷贝,深拷贝

   print id(a[0]),id(a[1]),id(a[2]),id(a[3]),id(a[4]),id(a[4][0]),id(a[4][1])
   print id(c[0]),id(c[1]),id(c[2]),id(c[3]),id(c[4]),id(a[4][0]),id(a[4][1])
   print id(d[0]),id(d[1]),id(d[2]),id(d[3]),id(d[4]),id(a[4][0]),id(a[4][1])

   a.append(5)  #修改对象a
bubuko.com,布布扣
a[4].append(c)  #修改对象a中的[‘a‘, ‘b‘]数组对象

   print id(a[0]),id(a[1]),id(a[2]),id(a[3]),id(a[4]),id(a[4][0]),id(a[4][1])
   print id(c[0]),id(c[1]),id(c[2]),id(c[3]),id(c[4]),id(a[4][0]),id(a[4][1])
   print id(d[0]),id(d[1]),id(d[2]),id(d[3]),id(d[4]),id(a[4][0]),id(a[4][1])

输出结果:

32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 41296480 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 41296480 31936000 31936024

可以明显的看到,浅拷贝只是拷贝父对象的所有内容,而深拷贝则对子对象新建一个对象,再拷贝内容,所以,当子对象发生改变时,浅拷贝会发生改变,而深拷贝不会发生改变。




完全理解python深拷贝和浅拷贝,布布扣,bubuko.com

完全理解python深拷贝和浅拷贝

标签:style   http   color   os   io   2014   line   python   

原文地址:http://my.oschina.net/u/1259000/blog/295973

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