Python copy对象(copy与deepcopy)

Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 
2. copy.deepcopy 深拷贝 拷贝对象及其子对象

看下面的一个实例

import copy
init = [1, 2, 3, 4, [‘a‘, ‘b‘]] #原始对象
assign = init #赋值,传对象的引用
cp = copy.copy(init) #对象拷贝,浅拷贝
dcp = copy.deepcopy(init) #对象拷贝,深拷贝  

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

print ‘init = ‘, init
print ‘assign = ‘, assign
print ‘cp = ‘, cp
print ‘dcp = ‘, dcp
init =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
assign =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
cp =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘]]
dcp =  [1, 2, 3, 4, [‘a‘, ‘b‘]]

现在,让我们看下这些对象的内存地址:

print ‘init id: ‘,id(init),‘------‘, ‘init[4] id:‘, id(init[4])
print ‘assign id: ‘, id(assign),‘------‘, ‘assign[4] id: ‘,id(assign[4])
print ‘cp id: ‘, id(cp),‘------‘, ‘cp[4] id: ‘,id(cp[4])
print ‘dcp id: ‘, id(dcp),‘------‘, ‘dcp[4] id: ‘,id(dcp[4])
init id:  64393032 ------ init[4] id: 64392648
assign id:  64393032 ------ assign[4] id:  64392648
cp id:  64433544 ------ cp[4] id:  64392648
dcp id:  65395784 ------ dcp[4] id:  64392968

reference

http://www.jb51.net/article/15714.htm

时间: 2024-12-03 08:27:27

Python copy对象(copy与deepcopy)的相关文章

Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子: 1 import copy 2 a = [1, 2, 3, 4, ['a', 'b']] #原始对象 3 4 b = a #赋值,传对象的引用 5 c = copy.copy(a) #对象拷贝,浅拷贝 6 d = copy.deepcopy(a) #对象拷贝,深拷贝

Python字典方法copy()和deepcopy()的区别

1 from copy import deepcopy # import deepcopy模块 2 d = {} 3 d['name'] = ['black', 'guts'] # d = {'name': ['black', 'guts']} 4 c = d.copy() # c = {'name': ['black', 'guts']} 5 dc = deepcopy(d) # dc = {'name': ['black', 'guts']} 6 d['name'].append('whit

python中的copy与deepcopy

引子:首先我们有一个赋值运算作为引子,如下 1 l1 = [1, 2, 3, ['java', 'python']] 2 l2 = l1 3 l1[0] = 111 4 print(l1) #输出结果:[111, 2, 3, ['java', 'python']] 5 print(l2) #输出结果:[111, 2, 3, ['java', 'python']] 6 #由上面的例子我们不难明白,python中对于赋值运算来说,l1与l2指向的是同一个地址,所以他们是完全一样的. 1.浅拷贝cop

转载:python中的copy模块(浅复制和深复制)

主要是介绍python中的copy模块. copy模块包括创建复合对象(包括列表.元组.字典和用户定义对象的实例)的深浅复制的函数. ########copy(x)########创建新的复合对象并通过引用复制x的成员来创建x的浅复制.更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用.对于内置类型,此函数并不经常使用.而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样直接使用类型名显然比使用copy()快很多.但是它们达到的效果是一样

python之深浅copy

三.深浅copy调用方法:import copy #浅拷贝copy.copy() 深拷贝copy.deepcopy() #赋值1. 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址.举例:import copy#字符串,数字a1 = 'adddddd'a2 = '12322'a2 = a1print(id(a1))print(id(a2))a3 = copy.deepcopy(a1)print(id(a1))print(id(a3))输出结果:4192344

python学习之copy模块

copy模块中有两个方法,copy.copy()和copy.deepcopy,这两个方法分别是用来实现浅拷贝和深拷贝.所谓浅拷贝就是只拷贝引用,拷贝后生成的两个变量仍然是同一个对象,即其中一个变化了,另一个也跟着变化.而对于深拷贝,则是拷贝数据,生成的两个变量是不同的对象,他们之间的变化互不影响.但有一点要注意,copy模块的两个拷贝方法中针对的深浅拷贝说的是待拷贝对象的元素,即不管是copy()方法还是deepcopy()方法,待拷贝对象本身都是深拷贝,生成的是两个不同的对象,举个例子说明:

python的深浅copy

#!/usr/bin/env python #-*- coding:utf-8 -*- a='abc' b=a a='def' print(b) #这里打印的是abc #1.执行a = 'abc',解释器创建了字符串'abc'和变量a,并把a指向'ABC' #2.执行b=a,解释器创建了变量b,并把变量b指向了变量a所指向的abc #3.执行a = 'def',解释器创建了字符串'def',并把a的指向改为'def',但b并没有更改: #所以最后打印的是abc name={ "z":{

python 复制 浅copy 深copy 的区别

1.浅copy: 外层添加元素时, 浅拷贝c不会随原列表a变化而变化:内层list添加元素时,浅拷贝c才会变化. 2.深copy: 无论原列表a如何变化,深拷贝d都保持不变. 3.赋值: 赋值对象随着原列表一起变化 深拷贝:只有一种形式,copy模块中的deepcopy函数.     和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素.     深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联. import copy a = [1,2,3,4,5,['a','b'],6]

copy对象

生活是美好的,现实也可以是美好的,欢迎大家到此一游了 我是今天的获奖嘉宾"木古章鱼". 今天介绍的内容很简单-copy对象,如果说你是一个学习软件技术的人,那你可能在编写代码的时候经常不经意的用到这个不起眼的术语. 正所谓,装逼才是正道,这句话在本行业可是体现的淋漓尽致. 算了说了太多的废话,想必大家也烦了.开始如正题 copy对象分为三种:引用Copy,浅Copy和深Copy 一:引用Copy - 简单 看下面的代码就够了: Object o1 = new Object(); Obj