Python的copy模块

Python 的copy模块

  • copy模块包括创建复合对象 (包括列表、元组、字典和用户定义对象的实例) 的深浅复制的函数。
  • 浅复制,就是拷贝了对象,而深复制就是引用对象还是指向内存空间的同一块地方
  • copy(x)创建新的复合对象并通过引用复制x的成员来创建x的浅复制。更加深层次说,
    它复制了对象,但对于对象中的元素,依然使用引用。
  • 一般不使用copy.copy(x) 是因为:使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,即直接使用类型名显然比使用copy()快很多
  • 判断是否是浅复制,即拷贝 是通过`is
a is b #返回的是True表示是引用,不是拷贝
       #返回的是False 表示是拷贝

import copy
task = {'person':'zjhouqio'}
task['result'] = "wode "
task1 = copy.copy(task)
task['wodde'] ="nide"
print task
print task1
"""
拷贝了,不是引用的同一个对象(通过 is 来判断)
"""
##############输出
{'person': 'zjhouqio', 'result': 'wode ', 'wodde': 'nide'}
{'person': 'zjhouqio', 'result': 'wode '}
a = [1,2,3]
b= list(a)
a.append(5)
b.append(4)
print a,b
###########输出
[1, 2, 3, 5] [1, 2, 3, 4]
a = [1,2,3,5]
m = a
a.append(10)
m.append(11)
print a is m
print a,m
#########输出
True
[1, 2, 3, 5, 10, 11] [1, 2, 3, 5, 10, 11]

copy(x)创建新的复合对象并通过引用复制x的成员来创建x的浅复制。更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用。

v = [[1], ['a'], ['A']]
k = copy.copy(v)
print v
print k
v[0].append(2)
print v
print k
#############输出
[[1], ['a'], ['A']]
[[1], ['a'], ['A']]
[[1, 2], ['a'], ['A']]
[[1, 2], ['a'], ['A']]
#############说明
copy(x)得到的列表中的元素,仍然是列表(对象),该对象在一个内存空间中,v,k中的元素只是引用了该对象

deepcopy()函数:完全的拷贝一个对象和一个对象的所有元素的值

  • 通过创建新的复合对象并重复复制 x 的所有成员来创建 x 的深复制
v = [[1], ['a'], ['A']]
k = copy.copy(v)
s = copy.deepcopy(v)
print v
print k
print s
print "---------------------------"
v[0].append(2)
print v
print k
print s
print "---------------------------"
s[0].append(10)
print v
print k
print s
#######################输出
[[1], ['a'], ['A']]
[[1], ['a'], ['A']]
[[1], ['a'], ['A']]
---------------------------
[[1, 2], ['a'], ['A']]
[[1, 2], ['a'], ['A']]
[[1], ['a'], ['A']]
---------------------------
[[1, 2], ['a'], ['A']]
[[1, 2], ['a'], ['A']]
[[1, 10], ['a'], ['A']]
##########################说明
通过深复制,使得 s 不仅拷贝了v这个对象,而且对象中的元素也拷贝了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值