`

python 引用与复制

 
阅读更多

在python中,任何不可变对象是传值的,而可变对象是传引用的。

不管是向函数传递参数或者是任何形式的对象复制来说,不可变对象(比如整数,字符串)被真正复制,而可变对象只是复制了一个对他们的引用,即在内存中只有一份对象,而引用两份。

 

 

a=b 这样的赋值,就会创建对b的引用,对于象数字和字符串这样的不可变的对象,这种赋值实际是创建了b的一个副本

 

 

>>> a='hello'

>>> b=a

>>> id(a)

29326432

>>> id(b)

29326432

>>> b is a

True

>>> a=1000

>>> b

'hello'

 

对于可变对象,比如字典和列表,a和b引用的是同一个对象,修改其中任意一个变量都会影响到另一个。

 

 

 

>>> a=[1,2,3,4]

>>> b=a

>>> id(a)

29280896

>>> id(b)

29280896

>>> b[3]='ccccccccc'

>>> a

[1, 2, 3, 'ccccccccc']

>>> 

 

列表和字典这样的容器对象,可以使用两种赋值操作:浅复制和深复制。浅复制创建一个新对象,但它包含的是对原始

对象中包含的项的引用。

比如下面的浅复制:

 

>>> a=[1,2,3,4,[9,0]]

>>> b=a

>>> a=[1,2,3,4,[9,0]]

>>> b=list(a)

>>> b is a

False

>>> b[0]=1000

>>> b

[1000, 2, 3, 4, [9, 0]] #注意,b修改了b[0]以后,对a没有影响

>>> a

[1, 2, 3, 4, [9, 0]]

>>> b[4][1]='cccc'   #注意,b修改了 b[4][1]以后,对a有影响

>>> b

[1000, 2, 3, 4, [9, 'cccc']]

>>> a

[1, 2, 3, 4, [9, 'cccc']]

 

深复制将创建一个新对象,并且递归的复制它包含的所有对象,没有内置对象可以创建深复制,可以使用copy.deepcopy()函数完成。

 

 

>>> import copy

>>> a=[1,2,3,[4,5]]

 

>>> b=copy.deepcopy(a)

>>> id(b)

29582240        

>>> id(a)

29581840

 

>>> a is b

False

 

>>> b[0]=1000

>>> b

[1000, 2, 3, [4, 5]]          #注意修改了b[0]之后对a没有影响

>>> a

[1, 2, 3, [4, 5]]

>>> b[3][1]='gggg'

>>> b

[1000, 2, 3, [4, 'gggg']]  #修改了 b[3][1]之后对a也没有影响,这是和浅复制的区别

>>> a

[1, 2, 3, [4, 5]]

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    python中引用与复制用法实例分析

    首先,理解Python中的"传值"与"传引用"是非常重要的。不可变对象,如整数、浮点数和字符串,当它们在变量之间赋值时,实际上是进行了值的复制,这意味着每个变量都有其独立的存储空间。例如: ```python a = 'hello...

    Python引用(import)文件夹下的py文件的方法

    Python的import包含文件功能就跟PHP的include类似,但更...复制代码 代码如下: # coding=utf-8 “import dir 目录下的 b.py 文件”   import dir.b   print dir.b.name 执行 a.py 报错 提示找不到这个模块的名字 d

    python复制与引用用法分析

    本文将详细介绍Python中复制与引用的用法,并通过实例进行分析。 首先,我们需要了解在Python中,一切皆对象,变量名实际上是对对象的引用。当一个变量被赋值为另一个变量时,它并没有创建一个对象的副本,而仅仅是...

    python复制粘贴快捷键-PyCharm入门教程-剪切、复制和粘贴python基础教程 .pdf

    2. **复制行或符号的引用**: 在编辑器中定位到需要的行,选择`Edit` -> `Copy Reference`(或`Ctrl+Shift+Alt+C`)来复制行或符号的引用,生成的字符串格式会根据插入点的类型变化。 3. **复制工具提示内容**: 当...

    Python里的引用与拷贝规律.doc

    在Python编程语言中,理解和掌握引用与拷贝的规律至关重要,因为这直接影响到代码的运行效果和内存管理。本文将详细解析Python中的引用、浅拷贝和深拷贝的概念及它们之间的区别。 首先,我们要明白Python中的“一切...

    python-引用传参.docx

    以下是一个关于Python引用传递的例子: ```python def change_list(list): list.append(4) my_list = [1, 2, 3] change_list(my_list) print(my_list) ``` 在这个例子中,`change_list`函数接收一个列表参数,并...

    python 如何快速复制序列

    在Python编程语言中,复制序列是一项常见的操作,特别是在处理列表、元组等数据结构时。本文将深入探讨Python中快速复制序列的几种方法,并解决一些常见的陷阱。 首先,我们可以使用基本的乘法操作来快速复制序列。...

    C语言中文网Python教程

    “7.3Python函数参数传递机制(超级详细).html”详细解释了Python的参数传递方式,Python采用“引用传递”的表象,实际上是按对象复制,区分了可变对象和不可变对象的传递行为。 综上所述,这个压缩包提供的教程...

    基于Python对象引用、可变性和垃圾回收详解

    这意味着`l2`和`l3`会创建与`l1`相同的元素序列,但如果`l1`中的元素是可变对象(如列表或字典),那么对`l1`的修改会影响到`l2`和`l3`中相应的元素,因为它们引用的是同一块内存。深复制(如通过`copy`模块的`...

    STPython使用说明 国产神通数据库 OSCAR python操作模块及使用手册

    安装STPython模块,可以使用pip安装对应版本的whl文件,或者手动解压whl文件并将STPython库复制到Python的相应模块目录。 【Linux环境下Python3的安装】 在Linux系统中,通常预装有Python 2.7,但若需要Python 3,...

    Python 八股文.pdf

    7. **Python 2与Python 3的差异**:Python 3与Python 2在语法、默认编码、字符串表示、除法行为等方面存在差异。例如,`print`在Python 3中是函数,在Python 2中是语句;Python 3的文件默认编码是UTF-8,Python 2则...

    copy-浅复制-python.docx

    在Python编程中,复制对象是一项常见的操作,尤其是在处理复杂数据结构如列表、元组或字典时。Python提供了两种复制方法:浅复制和深复制。本文主要关注浅复制的概念及其在实际编程中的应用。 浅复制,又称为表面...

    基于python的游戏合集

    要引用Python模块,请将“freegames”与游戏名称结合起来。 $ python3 -m freegames.snake 可以通过复制源代码来修改游戏。copy命令将在本地目录中创建一个Python文件,您可以对其进行编辑。 $ python3 -m ...

    基于Python实现的复制、移动、离线化你的 Markdown 文档,清理 Markdown 引用路径中的垃圾文件

    批量将 md 笔记(连带它的相对路径引用的图片、附件)复制或移动到另一指定的文件夹 离线化 批量将 md 笔记中的在线图片、附件、绝对路径引用的文件下载或移动到笔记的相对路径文件夹中,并将原始笔记中原来的绝对...

    Python:pyinstaller库实现打包代码拷贝到另一台无python环境电脑上运行(csdn)————程序.p.pdf

    将这个可执行文件复制到任何没有Python环境的计算机上,双击运行即可。 总结,使用`pyinstaller`可以方便地将Python代码打包为独立的可执行文件,但在打包过程中可能会遇到各种依赖问题。解决这些问题的关键在于...

    Python面试题汇总

    Python 内部使用引用计数机制来保持追踪内存中的对象,所有对象都有引用计数。引用计数增加的情况有:1、一个对象分配一个新名称;2、将其放入一个容器中(如列表、元组或字典)。引用计数减少的情况有:1、使用 del...

    python灰帽子包含高清扫描和可复制两个版本.zip

    本书是由知名安全机构ImmunityInc的资深黑帽JustinSeitz先生主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍.老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel...

    在Choregraphe中导入外部Python lib库示例

    2. **放置库文件**:将Python库文件(通常为`.py`或`.pyc`格式)复制到Choregraphe的`libs`目录下。这个目录通常位于`安装路径>\resources\apps\choregraphe\lib`。如果你有多个库,建议将它们放在一个单独的文件夹...

Global site tag (gtag.js) - Google Analytics