- 浏览: 193601 次
文章分类
最新评论
深拷贝: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 smtp 发邮件代码
2012-10-18 16:37 864#!/usr/bin/env python # -*- ... -
[Python]文件的创建与追加
2012-10-11 11:12 1044一、用Python创建一个新文件,内容是从0到9的整数, 每个 ... -
python import模块方法
2012-10-08 11:00 1059python包含子目录中的模块方法比较简单,关键是能够在sys ... -
pythoncomplete.vim
2012-09-28 10:34 891where is vim vim7.3中自带里自动补全 ... -
python 易混地带
2012-09-25 12:59 1085每门编程语言都有易混 ... -
Python 内置对象及模块
2012-09-25 12:58 3234Python作为一种高效的脚本语言,内置了很多实用的函数,同时 ... -
python 特点
2012-09-25 12:56 12061、Python以模块文件的方式组织代码。 Python每个模 ... -
命名类、属性和方法
2012-09-10 16:50 795类名通常由大写字母打头。这是标准惯例,可以帮助你识别类, ... -
import 语句的模块顺序
2012-09-10 16:08 1581我们推荐所有的模块在 Python 模块的开头部分导入。 ... -
python 文件操作
2012-09-07 11:07 1065python中对文件、文件夹(文件操作函数)的操作需要 ... -
Python 函数参数
2012-09-05 11:25 6241. 函数参数 2. 函数引用 3. * Tuple 非关 ... -
Python 标准文件
2012-09-01 23:05 1043Python中, 只要程序一执行, 便可以访问三个标准文件:标 ... -
Python 二分查找
2012-08-29 00:00 854def bsearch(l = [], a = 0 ,b ... -
Python Unicode
2012-08-08 21:10 811今天学习Python时,遇到一个问题,Python Non-A ... -
Python 字符串 Template
2012-08-05 16:43 722from string import Template ... -
Python 更新模型
2012-08-05 11:10 846更新模型,顾名思义就是对象在创建成功后,其值是否能够更新 p ... -
待解决问题
2012-08-04 20:25 7281. Python的循环引用 2. >>> ... -
Python __name__
2012-08-04 20:09 759看python程序是经常会碰到 if __name__ == ... -
Python Learning
2012-08-04 18:27 7541. # -*- coding: utf-8 -*- 推 ...
相关推荐
在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用于创建对象副本的两种常见方式。它们可以应用于不同类型的对象,如列表、字典、集合等。下面是对浅拷贝和深拷贝的描述: 浅拷贝:浅拷贝是创建一个新...
对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编程语言中,深拷贝和浅拷贝是两种不同的复制对象的方法,它们涉及到对象内存的管理和数据结构的复制。这两个概念对于理解和处理复杂的对象结构至关重要。 **浅拷贝**: 浅拷贝(Shallow Copy)是创建一个...
本文实例讲述了Python浅拷贝与深拷贝用法。分享给大家供大家参考。具体分析如下: >>> person=['name',['savings',100]] >>> hubby=person[:] >>> wifey=list(person) >>> [id(x) for x in person,hubby,wifey] ...
Python中的深拷贝和浅拷贝是编程时处理对象复制的关键概念,特别是在处理复杂数据结构时。它们决定了拷贝操作的“深度”,即创建新对象的程度。本文将深入探讨这两种拷贝的区别,以及如何在Python中正确使用它们。 ...
在Python编程语言中,"copy"模块提供了对对象复制的功能,包括浅拷贝(shallow copy)和深拷贝(deep copy)。这两种拷贝方式在处理复杂数据结构时尤为重要,因为它们之间的区别会影响到拷贝的对象及其引用。让我们...
2. **Python浅拷贝** 浅拷贝是通过`copy.copy()`函数实现的。它创建了一个新对象,但新对象中的元素仍然是原对象元素的引用。这意味着,如果原对象包含可变对象(如列表或字典),对这些子对象的修改会影响到浅拷贝...
在Python编程语言中,了解如何正确处理对象的拷贝至关重要,特别是浅拷贝和深拷贝的概念。浅拷贝和深拷贝主要涉及到列表、元组等可变对象的复制,以及这些对象内部包含的不可变和可变对象的情况。 浅拷贝(Shallow ...
我们经常需要复制一个列表到另一个变量,而在复制过程中涉及到的深拷贝(deep copy)和浅拷贝(shallow copy)是两个重要的概念。理解它们之间的差异对于编写健壮的程序代码和避免潜在的错误至关重要。 浅拷贝通常...
本文实例讲述了Python深拷贝与浅拷贝用法。分享给大家供大家参考,具体如下: 1、对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个...
本文实例讲述了Python中字典的浅拷贝与深拷贝用法。分享给大家供大家参考,具体如下: 最近发现的一个很值得记录的东西就是python字典的浅拷贝问题 首先,明确一下什么是浅拷贝,什么是深拷贝: 简单的来说就是,在...
python 直接赋值、浅拷贝与深拷贝.ipynb
变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) 【变量-对象-引用】 在Python中一切都是对象,比如说:3, 3.14, ‘Hello’, [1,2,3,4],{‘a’:1}…… 甚至连type其本身都是对象,type对象 Python...
在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表 l1 ...
### 深拷贝与浅拷贝的概念及应用 #### 一、深拷贝与浅拷贝的区别 在计算机编程领域中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两种常见的对象复制方法。这两种方法在处理复杂数据结构(如数组、列表等)时...
在Python中赋值拷贝、浅拷贝与深拷贝的区别 在python中有的三种对于对象的赋值方式,赋值、深浅拷贝,那么他们有什么样的不同点。下面我们就来聊聊。—–仅属于个人观点 一、赋值 说实在的,在python中,对象的赋值...
import copya = [1, 2, 3, 4, [‘a’, ‘b’]] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象拷贝,浅拷贝d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象aa[4]....