Python对象引用问题总结
对于对象引用问题,一直是一知半解的状态,现整理以备使用。
操作不可变对象进行加减运算时,会在内存中创建新的不可变实例,不会影响原来的引用
>>> c=12
>>> d=c
>>> c+=1
>>> c
13
>>> d
12
>>>
>>> a="345a"
>>> b=a
>>> a+="dfger"
>>> a
'345adfger'
>>> b
'345a'
>>> a=(1,2,3)
>>> b=a
>>> b
(1, 2, 3)
>>> a='wert'
>>> a
'wert'
>>> b
(1, 2, 3)
>>>
操作可变对象时,内存中的对象会发生变化,影响所有引用,与上一情况的区别在于改变对象时内存中会改变原来的对象还是创建新的对象。
>>> a=[1,2,3]
>>> b=a
>>> a.insert(0, "ertwer")
>>> a
['ertwer', 1, 2, 3]
>>> b
['ertwer', 1, 2, 3]
>>>
>>> a={1:2, 'a':'b',"4":5464}
>>> b=a
>>> a["678"]="F**K"
>>> a
{'a': 'b', 1: 2, '678': 'F**K', '4': 5464}
>>> b
{'a': 'b', 1: 2, '678': 'F**K', '4': 5464}
>>>
问题的关键还是在于对象是否mutable。相对而言,Python中immutable的对象只有numbers, strings, tuples, frozensets四种,改变其中一个引用,不会影响其他引用;其他list、dict以及这两个的子类对象,都属于mutable,改变任一引用,所有其他引用都会受到影响。
Python对象引用问题总结的更多相关文章
- 基于Python对象引用、可变性和垃圾回收详解
基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...
- Python对象引用和del删除引用
1.首先介绍下python的对象引用 1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用.即Python不允许程序员选择采用传值或传引用.Python参数传递采用的是“传对 ...
- 流畅的python 对象引用 可变性和垃圾回收
对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...
- python对象引用和垃圾回收
变量="标签" 变量a和变量b引用同一个列表: >>> a = [1, 2, 3] >>> b = a >>> a.appen ...
- Python 对象引用、可变性和垃圾回收
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 变量不是盒子 在示例所示的交互式控制台中,无法使用"变量是盒 ...
- Python对象引用的所有权
目录 引用所有权 传递引用的所有权--返回值 出借引用的所有权--返回值 占据引用的所有权--参数 出借引用的所有权--参数 引用所有权 谁持有对象引用的所有权,谁就要对对象负责. 引用的所有权对函数 ...
- python 对象引用计数增加和减少的情况
对象引用计数增加的情况: 1.对象被创建:x=4 2.另外的别人被创建:y=x 3.被作为参数传递给函数:foo(x) ->会增加2 4.作为容器对象的一个元素:a=[1,x,'33'] 对象 ...
- Python引用拷贝赋值
先安利一个网站,对学习编程很有帮助:http://www.pythontutor.com/ 可以逐行可视化执行代码,具体自行体验啦 这个网站也是我在看别人的博文时候找到的,也先贴上别人的理解吧,我觉得 ...
- [转] C++ 和 python之间的互相调用
转载自:https://www.cnblogs.com/apexchu/p/5015961.html 一.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不 ...
随机推荐
- 「SLYZ Online Judge#74 Be」
只有学校里的电脑才能看的题目 昊哥从牛客搬的,懒得找原题了 题意就是多组询问,每次询问一条树上路径,将这条路径上的点拿下来做\(0/1\)背包,求使得点权和为\(K\)的倍数的方案有几种 \(n< ...
- 「LG4178 Tree」
题目 我终于来抄点分治的板子了 随便说一点理解吧,点分治就是一种能求某种特定树上路径数量的算法 就是选择一个分治重心,统计一下以这个重心为\(LCA\)的路径的信息 之后对这个重心的子树再次分别选择分 ...
- 使用IPDB调试Python代码
(转载自:https://xmfbit.github.io/2017/08/21/debugging-with-ipdb/) IPDB是什么?IPDB(Ipython Debugger),和GDB类似 ...
- 【nlogn LIS】 模板
总结:stl真好用 #include <cstdio> #include <cstring> #include <iostream> #include <al ...
- 从零开始学习CocoaPods安装和使用
从零开始学习CocoaPods安装和使用 转载: Code4App原创:http://code4app.com/article/cocoapods-install-usage http://m.i ...
- NSString,NSData,NSFileManager常用方法
一.利用NSString类进行文件路径的处理 文件路径格式: NSString *path=@"/Uesrs/apple/testfile.txt" 常用方法汇总: 1.获得组成此 ...
- GoBelieve-国内唯一开源IM服务
GoBelieve-国内唯一开源IM服务 1. 一小时接入 专注IM,无冗余功能 几行代码,一小时接入 省时省力. 2. 自由定制 提供最新源码, 自行二次开发,业务协议 交互视觉均可根据业务需求 自 ...
- var let const的一些区别
var let const 都是来定义变量的. var let 作用域有些区别. const 类似于java中的常量的概念.即:只能给一个变量赋值一次,即指定一个引用. 举例来说: function ...
- MySQL学习之用户管理
用户权限管理 用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全. 简单点说:有的用户可以访问并修改这个数据,而有些用户只能去查看数据,而不能修改数据.就如同博 ...
- Plugin 'InnoDB' registration as a STORAGE ENGINE failed
今天在安装mysql时遇到了mysql服务打不开的的情况,通过在cmd中输入MySQL --console,显示错误信息,得到如下情况. 原因是InnoDB初始化异常,也就是是说,卸载mysql的时候 ...