流畅的python第八章对象引用,可变性和垃圾回收
变量不是盒子

在==和is之间选择
==比较两个对象的值,而is比较对象的标识

元组的相对不可变姓
元组与多数的python集合(列表,字典,集,等等)一样,保存的是对象的引用。如果引用的元素是可变的,即便元组本身不可变,元素依然可变。元组的不可变姓其实是值tuple数据结构的物理内容(保存的引用)不可变,与引用对象无关。

默认做浅复制
使用构造函数和[:]做的都是浅复制




为任意对象做深复制和浅复制
copy模块提供的deepcopy和copy函数能为任意对象做深复制和浅复制




函数的参数作为引用时


整数和元组的+=重新创建一个新的值,而列表是就地添加,没有创建新的列表
不要使用可变类型作为参数的默认值



防御可变参数
如果定义的函数接受可变参数,应该谨慎考虑调用方是否期望修改传入的参数


在使用可变参数时,如果直接赋值,那么任何一方修改了,另一方都会受到印象,因为是同一个对象,如果用构造函数创建新的值则不受影响。
del和垃圾回收
del语句删除名称,而不是对象,del命令可能会导致对象被当做垃圾回收,但是仅当删除的变量保存的是对象的最后一个引用,或者无法得到对象时。重新绑定也可能会导致对象的引用数量归零,导致对象被销毁。


弱引用

WeakValueDictionary简介


python对不可变类型实加的把戏
对于不可变类型,其浅复制和深复制都是复制其的引用

流畅的python第八章对象引用,可变性和垃圾回收的更多相关文章
- 流畅的python 对象引用 可变性和垃圾回收
对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...
- 基于Python对象引用、可变性和垃圾回收详解
基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...
- Fluent_Python_Part4面向对象,08-ob-ref,对象引用、可变性和垃圾回收
第四部分第8章,对象引用.可变性和垃圾回收 1. 创建对象之后才会把变量分配给对象 变量是对象的标注,是对象的别名,是对象的引用,并不是对象存储的地方. 例子1. 证明赋值语句的右边先执行 class ...
- PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收
前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...
- gj7 对象引用、可变性和垃圾回收
7.1 python变量到底是什么 #python和java中的变量本质不一样,python的变量实质上是一个指针 int str, 便利贴 a = 1 a = "abc" #1. ...
- Python基础部分:7、 垃圾回收机制和流程控制
目录 一.垃圾回收机制 1.引用计数 2.标记清除 3.分类代收 二.流程控制 1.理论 2.必备知识 3.分支结构 4.循环结构 一.垃圾回收机制 垃圾回收机制,简称GC,是python解释器自带的 ...
- Python 对象引用、可变性和垃圾回收
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 变量不是盒子 在示例所示的交互式控制台中,无法使用"变量是盒 ...
- Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器
frozenset:不可变集合,无序,不重复 dict上的特性: 1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tup ...
- Python对象的引用、可变性和垃圾回收
1.标识.相等性和别名 别名的例子 >>> charles = {'name': 'Charles L. Dodgson', 'born': 1832} >>> l ...
随机推荐
- [前端随笔][CSS] 制作一个加载动画 即帖即用
说在前面 描述 [加载中loading...] 的动画图片往往使用GIF来实现,但GIF消耗资源较大,所以使用CSS直接制作更优. 效果传送门1 效果传送门2 关键代码 @keyframes 规则 用 ...
- [转]windows消息机制(MFC)
消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据 ...
- 196. Delete Duplicate Emails
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- socket编程的网络协议
"我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容" TCP/IP只是一个协议栈,就像程序运行一样,必须要实现运行,同时还要 ...
- java中的object... args参数
关于java方法中Object... args参数的含义 在阅读google发布的volley源码时,突然看到一个方法中存在这样的写法,如 :v(String format, Object... ar ...
- window10 Powershell使用curl命令报错解决方法
报错信息:curl : 无法分析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整.请指定 UseBasicParsing ...
- 【POJ】1089Intervals
Intervals Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8276 Accepted: 3270 Descrip ...
- python基础之闭包函数与装饰器
闭包函数: 什么是闭包函数: 闭指的是定义在一个函数内部 包指的是该函数包含对外部作用域(非全局作用域)名字的引用 def counter(): n=0 def incr(): nonlocal n ...
- io模型,mysql
多路复用IO(IO multiplexing) 多路复用就是调用select来统一管理多个连接 强调: 1. 如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使 ...
- B 君的第二题 (hongkong)
B 君的第二题 (hongkong) 题目大意: 一个长度为\(n(n\le2\times10^5)\)的数组,给定一个数\(k(k\le40)\).用\(a[i][j]\)表示该数组\(i\)次前缀 ...