在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 a = 'hello...
Python的import包含文件功能就跟PHP的include类似,但更...复制代码 代码如下: # coding=utf-8 “import dir 目录下的 b.py 文件” import dir.b print dir.b.name 执行 a.py 报错 提示找不到这个模块的名字 d
本文将详细介绍Python中复制与引用的用法,并通过实例进行分析。 首先,我们需要了解在Python中,一切皆对象,变量名实际上是对对象的引用。当一个变量被赋值为另一个变量时,它并没有创建一个对象的副本,而仅仅是...
2. **复制行或符号的引用**: 在编辑器中定位到需要的行,选择`Edit` -> `Copy Reference`(或`Ctrl+Shift+Alt+C`)来复制行或符号的引用,生成的字符串格式会根据插入点的类型变化。 3. **复制工具提示内容**: 当...
在Python编程语言中,理解和掌握引用与拷贝的规律至关重要,因为这直接影响到代码的运行效果和内存管理。本文将详细解析Python中的引用、浅拷贝和深拷贝的概念及它们之间的区别。 首先,我们要明白Python中的“一切...
以下是一个关于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中快速复制序列的几种方法,并解决一些常见的陷阱。 首先,我们可以使用基本的乘法操作来快速复制序列。...
“7.3Python函数参数传递机制(超级详细).html”详细解释了Python的参数传递方式,Python采用“引用传递”的表象,实际上是按对象复制,区分了可变对象和不可变对象的传递行为。 综上所述,这个压缩包提供的教程...
这意味着`l2`和`l3`会创建与`l1`相同的元素序列,但如果`l1`中的元素是可变对象(如列表或字典),那么对`l1`的修改会影响到`l2`和`l3`中相应的元素,因为它们引用的是同一块内存。深复制(如通过`copy`模块的`...
安装STPython模块,可以使用pip安装对应版本的whl文件,或者手动解压whl文件并将STPython库复制到Python的相应模块目录。 【Linux环境下Python3的安装】 在Linux系统中,通常预装有Python 2.7,但若需要Python 3,...
7. **Python 2与Python 3的差异**:Python 3与Python 2在语法、默认编码、字符串表示、除法行为等方面存在差异。例如,`print`在Python 3中是函数,在Python 2中是语句;Python 3的文件默认编码是UTF-8,Python 2则...
在Python编程中,复制对象是一项常见的操作,尤其是在处理复杂数据结构如列表、元组或字典时。Python提供了两种复制方法:浅复制和深复制。本文主要关注浅复制的概念及其在实际编程中的应用。 浅复制,又称为表面...
要引用Python模块,请将“freegames”与游戏名称结合起来。 $ python3 -m freegames.snake 可以通过复制源代码来修改游戏。copy命令将在本地目录中创建一个Python文件,您可以对其进行编辑。 $ python3 -m ...
批量将 md 笔记(连带它的相对路径引用的图片、附件)复制或移动到另一指定的文件夹 离线化 批量将 md 笔记中的在线图片、附件、绝对路径引用的文件下载或移动到笔记的相对路径文件夹中,并将原始笔记中原来的绝对...
将这个可执行文件复制到任何没有Python环境的计算机上,双击运行即可。 总结,使用`pyinstaller`可以方便地将Python代码打包为独立的可执行文件,但在打包过程中可能会遇到各种依赖问题。解决这些问题的关键在于...
Python 内部使用引用计数机制来保持追踪内存中的对象,所有对象都有引用计数。引用计数增加的情况有:1、一个对象分配一个新名称;2、将其放入一个容器中(如列表、元组或字典)。引用计数减少的情况有:1、使用 del...
本书是由知名安全机构ImmunityInc的资深黑帽JustinSeitz先生主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍.老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel...
2. **放置库文件**:将Python库文件(通常为`.py`或`.pyc`格式)复制到Choregraphe的`libs`目录下。这个目录通常位于`安装路径>\resources\apps\choregraphe\lib`。如果你有多个库,建议将它们放在一个单独的文件夹...