`

Python 直接赋值、浅拷贝和深度拷贝解析

 
阅读更多

https://www.cnblogs.com/alinh/p/6603976.html

Python 直接赋值、浅拷贝和深度拷贝解析

 
  • 直接赋值:其实就是对象的引用(别名)。

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

字典浅拷贝实例

实例

1
2
3
4
5
6
7
>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [123]}, {1: [123]})
>>> a[1].append(4)
>>> a, b
({1: [1234]}, {1: [1234]})

深度拷贝需要引入 copy 模块:

实例

1
2
3
4
5
6
7
>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1234]}, {1: [1234]})
>>> a[1].append(5)
>>> a, c
({1: [12345]}, {1: [1234]})

解析

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
= [1234, ['a''b']] #原始对象
  
= a                       #赋值,传对象的引用
= copy.copy(a)            #对象拷贝,浅拷贝
= 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
=  [1234, ['a''b''c'], 5]
=  [1234, ['a''b''c'], 5]
=  [1234, ['a''b''c']]
=  [1234, ['a''b']]

 

分享到:
评论

相关推荐

    详解Python列表赋值复制深拷贝及5种浅拷贝

    在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表 l1 ...

    详解Python直接赋值,深拷贝和浅拷贝

    Python中的赋值、深拷贝和浅拷贝是理解数据操作和对象管理的关键概念,尤其在处理复杂数据结构如列表和字典时更为重要。直接赋值、浅拷贝和深拷贝之间的区别主要体现在对对象引用和内容的复制方式上。 首先,直接...

    python浅拷贝、深拷贝

    在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用于创建对象副本的两种常见方式。它们可以应用于不同类型的对象,如列表、字典、集合等。下面是对浅拷贝和深拷贝的描述: 浅拷贝:浅拷贝是创建一个新...

    Python 深拷贝和浅拷贝详解

    在Python编程语言中,深拷贝和浅拷贝是两种不同的复制对象的方法,它们涉及到对象内存的管理和数据结构的复制。这两个概念对于理解和处理复杂的对象结构至关重要。 **浅拷贝**: 浅拷贝(Shallow Copy)是创建一个...

    python 直接赋值和copy的区别详解

    直接赋值和copy的区别: 直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 例子...

    一篇文章读懂Python赋值与拷贝

    变量赋值就是给对象绑定一个名字,赋值并不会拷贝对象。好比我们出生的时候父母就要给我们取一个名字一样,给人取个绰号并不来多出一个人来,只是多一个名字罢了。 两个对象做比较有两种方式,分别是:is 与 == ,is...

    Python 赋值,浅拷贝,深拷贝

    直接赋值:对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy模块的deepcopy方法,完全拷贝了父对象及其子对象。 1 基础概念 在Python里,一切皆对象,完全的...

    对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    在Python编程语言中,列表和数组的赋值、浅拷贝和深拷贝是数据操作中的重要概念,它们涉及到对象的引用机制、内存分配以及对数据修改的影响。理解这些概念对于进行有效的数据操作和避免潜在的错误至关重要。下面将...

    深入浅析Python中list的复制及深拷贝与浅拷贝

    1. 直接赋值:这是最直接的复制方法,使用赋值操作符“=”将一个列表直接赋给另一个变量。这种方法不会创建新的列表对象,而是创建一个新的引用指向原始对象。 2. 使用copy模块中的copy()方法:这个方法会返回对象...

    对python append 与浅拷贝的实例讲解

    Python中的列表append方法和浅拷贝是两个重要的概念,理解它们对于编写正确的Python代码非常有帮助。本文将通过实例来讲解这两个知识点。 首先,我们来看看什么是append方法。在Python中,append是列表(list)的一...

    python 深浅拷贝与赋值

    python 深浅拷贝与赋值

    Python中的赋值、浅拷贝、深拷贝介绍

    在Python编程语言中,理解赋值、浅拷贝和深拷贝的概念对于编写高效和正确的代码是非常关键的。接下来,我们将详细探讨这三种方式的含义和区别,并通过例子加深理解。 首先,让我们从Python中的赋值说起。在Python中...

    Python中字典的浅拷贝与深拷贝用法实例分析

    本文实例讲述了Python中字典的浅拷贝与深拷贝用法。分享给大家供大家参考,具体如下: 最近发现的一个很值得记录的东西就是python字典的浅拷贝问题 首先,明确一下什么是浅拷贝,什么是深拷贝: 简单的来说就是,在...

    Python解析cdd 文件和批量删除CANoe工程cbf文件

    本主题主要关注两个方面:使用Python解析CDD文件和批量删除CANoe工程中的CBF文件。CDD(Configuration Data Description)文件是用于描述CANoe工程配置的数据文件,而CBF(CAN Bus Format)文件则是CANoe中存储CAN...

    浅谈python连续赋值可能引发的错误

    理解Python的引用和赋值机制对于编写无误的代码至关重要。在编写涉及到可变对象的函数时,尤其要注意参数传递的影响,以避免副作用。通过了解这些概念,我们可以编写更加健壮和易于维护的Python代码。

    学学Python_18语句_赋值语句1(序列解包)

    - **赋值**:在Python中,赋值语句不仅仅是将一个值拷贝给变量,而是创建了一个引用关系。这意味着,如果两个变量指向同一个对象,改变其中一个变量的值会影响到另一个。 - **序列**:在Python中,序列是一种数据...

Global site tag (gtag.js) - Google Analytics