-
直接赋值:其实就是对象的引用(别名)。
-
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
-
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
字典浅拷贝实例
实例
1
2
3
4
5
6
7
|
>>>a = { 1 : [ 1 , 2 , 3 ]}
>>> b = a.copy()
>>> a, b ({ 1 : [ 1 , 2 , 3 ]}, { 1 : [ 1 , 2 , 3 ]})
>>> a[ 1 ].append( 4 )
>>> a, b ({ 1 : [ 1 , 2 , 3 , 4 ]}, { 1 : [ 1 , 2 , 3 , 4 ]})
|
深度拷贝需要引入 copy 模块:
实例
1
2
3
4
5
6
7
|
>>> import copy
>>> c = copy.deepcopy(a)
>>> a, c ({ 1 : [ 1 , 2 , 3 , 4 ]}, { 1 : [ 1 , 2 , 3 , 4 ]})
>>> a[ 1 ].append( 5 )
>>> a, c ({ 1 : [ 1 , 2 , 3 , 4 , 5 ]}, { 1 : [ 1 , 2 , 3 , 4 ]})
|
解析
1、b = a: 赋值引用,a 和 b 都指向同一个对象。
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
3、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
更多实例
以下实例是使用 copy 模块的 copy.copy( 浅拷贝 )和(copy.deepcopy ):
实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/usr/bin/python # -*-coding:utf-8 -*- import copy
a = [ 1 , 2 , 3 , 4 , [ 'a' , 'b' ]] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append( 5 ) #修改对象a
a[ 4 ].append( 'c' ) #修改对象a中的['a', 'b']数组对象
print ( 'a = ' , a )
print ( 'b = ' , b )
print ( 'c = ' , c )
print ( 'd = ' , d )
|
以上实例执行输出结果为:
1
2
3
4
|
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' ]]
|
相关推荐
python 直接赋值、浅拷贝与深拷贝.ipynb
对Python中列表和数组的赋值 中 ,浅拷贝和深拷贝的实例讲解 浅 引⽤: 列表赋值: 1234567>>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3] 解释:[1, 2, 3]被视作⼀个对象...
主要介绍了Python直接赋值、浅拷贝与深度拷贝,结合实例形式分析了Python直接赋值、浅拷贝与深度拷贝的概念、原理、用法及相关操作注意事项,需要的朋友可以参考下
在Python中赋值拷贝、浅拷贝与深拷贝的区别 在python中有的三种对于对象的赋值方式,赋值、深浅拷贝,那么他们有什么样的不同点。下面我们就来聊聊。—–仅属于个人观点 一、赋值 说实在的,在python中,对象的赋值...
在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表 l1 ...
主要介绍了Python直接赋值,深拷贝和浅拷贝的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
主要介绍了Python的赋值、深拷贝与浅拷贝的区别,需要的朋友可以参考下
1、Python 深拷贝和浅拷贝概念理解 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以...
在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用于创建对象副本的两种常见方式。它们可以应用于不同类型的对象,如列表、字典、集合等。下面是对浅拷贝和深拷贝的描述: 浅拷贝:浅拷贝是创建一个新...
主要介绍了Python直接赋值及深浅拷贝原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
python元组赋值_python基础教程之元组操作使⽤详解 简介 tuple 1.元组是以圆括号"()"包围的数据集合,不同成员以","分隔。通过下标进⾏访问 2.不可变序列,可以看做不可变的列表,与列表不同:元组中数据⼀旦确⽴就...
变量赋值就是给对象绑定一个名字,赋值并不会拷贝对象。好比我们出生的时候父母就要给我们取一个名字一样,给人取个绰号并不来多出一个人来,只是多一个名字罢了。 两个对象做比较有两种方式,分别是:is 与 == ,is...
直接赋值:对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy模块的deepcopy方法,完全拷贝了父对象及其子对象。 1 基础概念 在Python里,一切皆对象,完全的...
定义 直接赋值:就是对象的引用(别名) 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象 深拷贝(deepcopy):copy模块的...以下是直接赋值、浅拷贝和深拷贝之对比 import copy a = [1, 2, 3, 4, ['a', 'b']]
图解:python中的浅拷贝和深拷贝 首先,我们考虑这样一个场景:在该场景中,我们各种列表的颜色,每个颜色代表假定颜色类的一个实例。比如,由一个warmtones列表表示现有的颜色,warmtones = list(''red","green",...
除了基本的赋值表达式之外,Python还提供了一些其他的赋值表达式,包括加法赋值、减法赋值、乘法赋值、除法赋值和取模赋值。这些赋值表达式允许我们在赋值的同时执行一些简单的算术运算。 例如,我们可以使用以下...