`

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中列表和数组的赋值以及-浅拷贝和深拷贝的实例讲解

    对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编程语言中,了解对象的赋值、深拷贝和浅拷贝是至关重要的,因为这直接影响到程序中数据的处理和预期行为。以下是对这些概念的详细解释: 1. **Python直接赋值** 当我们将一个对象赋值给另一个变量时,如`...

    python浅拷贝、深拷贝

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

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

    浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象。 深拷贝: 拷贝父对象. 以及其内部的子对象 在之前的文章中,提到可变对象和不可变对象,接下来也是以这两者的区别进行展开 直接赋值 对于可变对象和不可变对象,...

    图解:python中的浅拷贝和深拷贝

    在Python编程语言中,了解如何正确处理对象的拷贝至关重要,特别是浅拷贝和深拷贝的概念。浅拷贝和深拷贝主要涉及到列表、元组等可变对象的复制,以及这些对象内部包含的不可变和可变对象的情况。 浅拷贝(Shallow ...

    Python直接赋值及深浅拷贝原理详解

    在Python编程语言中,了解对象的赋值和拷贝机制是非常关键的,因为这直接影响到程序的运行逻辑。本文将详细解析直接赋值、浅拷贝和深拷贝的概念、原理以及它们之间的区别。 首先,我们要理解“直接赋值”的概念。当...

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

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

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

    对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3] 解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的...

    python 深浅拷贝与赋值

    python 深浅拷贝与赋值

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

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

    python的深拷贝与浅拷贝

    Python中的深拷贝和浅拷贝是编程时处理对象复制的关键概念,特别是在处理复杂数据结构时。它们决定了拷贝操作的“深度”,即创建新对象的程度。本文将深入探讨这两种拷贝的区别,以及如何在Python中正确使用它们。 ...

    Python浅拷贝与深拷贝用法实例

    本文实例讲述了Python浅拷贝与深拷贝用法。分享给大家供大家参考。具体分析如下: >>> person=['name',['savings',100]] >>> hubby=person[:] >>> wifey=list(person) >>> [id(x) for x in person,hubby,wifey] ...

    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中,序列是一种数据...

    python-赋值表达式.docx

    Python中的赋值表达式是编程的基本操作之一,它允许我们...通过合理利用这些赋值表达式,可以使Python代码保持清晰和高效,提高程序的可读性和可维护性。在编写Python程序时,理解并熟练运用这些赋值方法是至关重要的。

    python解析flv文件

    python解析flv文件库,内含详细注释介绍flv文件结构及解析原理

    python实现的简单的class解析以及简单执行class.zip

    通过阅读和学习这个脚本,你可以更深入地理解Java Class文件的结构以及Python如何实现对它的解析和执行。 总的来说,Python解析和执行Java Class文件是一项涉及编译原理、字节码和虚拟机模拟的复杂任务。它需要对...

Global site tag (gtag.js) - Google Analytics