Python的copy模块

来源:互联网 发布:搜狗拼音输入法mac版 编辑:程序博客网 时间:2024/05/22 00:29

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 copytask = {'person':'zjhouqio'}task['result'] = "wode "task1 = copy.copy(task)task['wodde'] ="nide"print taskprint 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 = aa.append(10)m.append(11)print a is mprint 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 vprint kv[0].append(2)print vprint 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 vprint kprint sprint "---------------------------"v[0].append(2)print vprint kprint sprint "---------------------------"s[0].append(10)print vprint kprint 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这个对象,而且对象中的元素也拷贝了
原创粉丝点击