`

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 直接赋值、浅拷贝与深拷贝.ipynb

    python 直接赋值、浅拷贝与深拷贝.ipynb

    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直接赋值、浅拷贝与深度拷贝。分享给大家供大家参考,具体如下: 直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): ...

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

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

    python浅拷贝、深拷贝

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

    Python 深拷贝和浅拷贝详解

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

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

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

    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解析TLV格式的脚本

    TLV解析工具 使用命令 python getTlVData.py pcap文件路径; 可以直接解析wireshark 抓包的工具

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

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

Global site tag (gtag.js) - Google Analytics