1 对象及其引用

python中,引用是用命名空间来实现的,命名空间维护了变量和对象之间的引用关系。

 myInt = 27
yourInt = myInt #change the value of yourInt
yourInt = yourInt + 5

改变值的过程中,命名空间快照如下:

  、

如上图所示,每个不可变对象的操作都将创建指向新对象的引用。

对于可变对象,情况会不一样。

 list1 = [1, 2, 3]
list2 = list1 #list1 append a new element
list1.append(4) print(list1)
print(list2)

对list1的改变已经反映到了list2中,list1、list2均引用同一个对象。

2 深复制与浅复制

 >>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> list1.append(list2) #将列表2添加到列表1中
>>> list1
[1, 2, 3, [4, 5, 6]]
>>> list3 = list2 #给这个列表另一个名字
>>> list3
[4, 5, 6]
>>> list2 is list3
True
>>> list3[2] = 66 #重新赋值
>>> list3
[4, 5, 66] #列表3变化,正常
>>> list2
[4, 5, 66] #列表2变化 ,正常
>>> list1
[1, 2, 3, [4, 5, 66]] #列表1也变化了,神马情况

具体情况如下图:

如上,将list2加入list1时,只是复制了应用,没有复制对象本身的情况,称为浅拷贝。要复制内容,而不是简单的复制引用,称为深拷贝。

在copy模块中,有deepcopy函数,在需要时,强制进行深拷贝。

编程技巧: 对引用可变对象的变量进行操作,可能会改变对象本身或者创建一个新的对象。对引用不可变对象的变量进行操作,

只会创建新的对象

python里面的引用的更多相关文章

  1. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  2. Python 对象的引用计数和拷贝

    Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...

  3. python中的引用

    作为一个python初学者,今天被一个python列表和词典引用的问题折磨了很久,但其实了解了缘由也很简单,记录在此备忘. 首先背书python中的引用对象问题: 1. python不允许程序员选择采 ...

  4. Python中的引用的使用注意

    关于Python中的引用的一些使用注意 在python中,在创建一个对象并给它赋予一个变量时,这个赋予的变量仅仅是一个引用它所代表的对象.也就是说新创建的对象只是指向计算机中储存那个对象的内存. 比如 ...

  5. python的计数引用分析(一)

    python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1 ...

  6. python 子包引用父包和其他子包

    python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...

  7. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  8. python 模块被引用多次但是里面的全局表达式总共只会执行一次

    python 模块被引用多次但是里面的全局表达式总共只会执行一次

  9. python传值&值引用

    [python传值&值引用] 和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方式.实际上,这种方式相当于传值 ...

随机推荐

  1. iOS中block循环引用问题

    1.block是控制器对象的一个属性,则在block内部使用self将会引起循环应用 typedef void(^TestBlock)(); @interface SecondViewControll ...

  2. Alpha 冲刺一

    团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 界面(简陋) 登录界 ...

  3. ci test

    下载ci 版本 3.1.9 下载地址 https://www.codeigniter.com/ 怎么查看CI的版本信息?想看某个项目中使用的CI具体是哪个版本,怎么查看?system\core\cod ...

  4. TCP/IP之大明内阁 转

    原创: 刘欣 码农翻身 2016-11-02 本文是<TCP/IP之大明王朝邮差>的前传,  讲一讲大明内阁的各位大人是怎么设计TCP/IP网络的.大明天启年间,  明熹宗朱由校醉心于木工 ...

  5. python 多参数并行化

    multiprocessing模块与map方法 import time from datetime import datetime from multiprocessing.dummy import ...

  6. BZOJ2440 中山市选2011完全平方数(容斥原理+莫比乌斯函数)

    如果能够知道不大于n的合法数有多少个,显然就可以二分答案了. 考虑怎么求这个.容易想到容斥,即枚举完全平方数.我们知道莫比乌斯函数就是此种容斥系数.筛出来就可以了. 注意二分时会爆int. #incl ...

  7. Make Palindrome CodeForces - 600C(思维)

    A string is called palindrome if it reads the same from left to right and from right to left. For ex ...

  8. POJ 1125 Stockbroker Grapevine(最短路基础题)

    Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spre ...

  9. MySQL中使用Like模糊查询太慢

    问题:明明建立了索引,为何Like模糊查询速度还是特别慢? Like是否使用索引? 1.like %keyword    索引失效,使用全表扫描.但可以通过翻转函数+like前模糊查询+建立翻转函数索 ...

  10. 【Revit API】改变填充区域的填充样式

    话不多说,直接上代码 var target = pattern.Target; var name = pattern.Name; var fpElem = FillPatternElement.Get ...