`

Python 浅拷贝 深拷贝

 
阅读更多

深拷贝:a -> b  copy(a)  a -> c  content(b) = content(c) && id(b) != id(c)

浅拷贝:a -> b  copy(a)  a -> b  

 

也就是说深拷贝为新对象制定了独立的新拷贝,逻辑不相关,而只是内容相同,而浅拷贝只是简单的复制引用关系。

引用时不可改变的指针,指针是可改变的引用。

 

 

person = ['name',['Saving',100.0]]
hubby = person[:]
#wife = list[person]
print 'before',
print person , hubby
print [id(x) for x in person]
print [id(x) for x in hubby]
print '====================================='
hubby[0] = 'joe'
hubby[1][1] = 50
print 'after',
print person , hubby
print [id(x) for x in person]
print [id(x) for x in hubby]

 运行结果:

 

before ['name', ['Saving', 100.0]] ['name', ['Saving', 100.0]]

[4965536, 38955528]

[4965536, 38955528]

=====================================

after ['name', ['Saving', 50]] ['joe', ['Saving', 50]]

[4965536, 38955528]

[39020160, 38955528]

惊讶发现,hubby的那么改变没有导致person的那么改变,而列表则发生改变。为什么?

因为String是不可变对象,在复制的时候会创建新的变量(红色所示)而list则是可改变对象,复制直接复制引用(浅拷贝)。

如果采用hubby = copy.deepcopy(person),则变成深拷贝。

 

1. 非容器类型(比如数字,字符串和其他"原子"类型的对象,像代码,类型和 xrange 对象等)没有被拷贝一说

2. 如果元组变量只包含原子类型对象,对它的深拷贝将不会进行,即使深拷贝也只得到一个浅拷贝

3. 浅拷贝是用完全切片操作来完成的

分享到:
评论

相关推荐

    python浅拷贝、深拷贝

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

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

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

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

    python的深拷贝与浅拷贝

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

    copy的使用(深拷贝、浅拷贝)

    在Python编程语言中,"copy"模块提供了对对象复制的功能,包括浅拷贝(shallow copy)和深拷贝(deep copy)。这两种拷贝方式在处理复杂数据结构时尤为重要,因为它们之间的区别会影响到拷贝的对象及其引用。让我们...

    Python的赋值、深拷贝与浅拷贝的区别详解

    2. **Python浅拷贝** 浅拷贝是通过`copy.copy()`函数实现的。它创建了一个新对象,但新对象中的元素仍然是原对象元素的引用。这意味着,如果原对象包含可变对象(如列表或字典),对这些子对象的修改会影响到浅拷贝...

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

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

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

    我们经常需要复制一个列表到另一个变量,而在复制过程中涉及到的深拷贝(deep copy)和浅拷贝(shallow copy)是两个重要的概念。理解它们之间的差异对于编写健壮的程序代码和避免潜在的错误至关重要。 浅拷贝通常...

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

    本文实例讲述了Python深拷贝与浅拷贝用法。分享给大家供大家参考,具体如下: 1、对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个...

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

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

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

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

    Python中的深拷贝和浅拷贝详解

    变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) 【变量-对象-引用】 在Python中一切都是对象,比如说:3, 3.14, ‘Hello’, [1,2,3,4],{‘a’:1}…… 甚至连type其本身都是对象,type对象 Python...

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

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

    深拷贝拷贝的是内容,浅拷贝拷贝的是指针

    ### 深拷贝与浅拷贝的概念及应用 #### 一、深拷贝与浅拷贝的区别 在计算机编程领域中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两种常见的对象复制方法。这两种方法在处理复杂数据结构(如数组、列表等)时...

    Python中赋值拷贝、浅拷贝与深拷贝的区别

    在Python中赋值拷贝、浅拷贝与深拷贝的区别 在python中有的三种对于对象的赋值方式,赋值、深浅拷贝,那么他们有什么样的不同点。下面我们就来聊聊。—–仅属于个人观点 一、赋值 说实在的,在python中,对象的赋值...

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

    import copya = [1, 2, 3, 4, [‘a’, ‘b’]] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象拷贝,浅拷贝d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象aa[4]....

Global site tag (gtag.js) - Google Analytics