流程的Python 第八章:对象引用、可变性和垃圾回收
2017-07-18 15:06
627 查看
前言:
对象与对象名称之间的区别。名称不是对象,而是单独的东西。
目录:
内容回顾
相关资料
阅读后感
正文:
一. 内容回顾
1.1 变量不是盒子
变量不是盒子,可视作便利贴
1.2 标识、相等性和别名
比较数值: ==
比较标识: is
1.3 默认做浅复制
输出结果:
参考解释图:
1.4 函数的参数作为引用时
Skip
1.5 del和垃圾回收
Python使用了垃圾回收器来自自动销毁那些不再使用的对象。每个对象都有一个引用计数,当这个计数为0时Python能够安全地销毁这个对象。
1.6 弱引用
弱引用是避免循环引用的一种方法,弱引用不记录引用计数。当一个对象只有弱引用时可能被垃圾回收器回收。
使用weakref模块,你可以创建到对象的弱引用,Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象。
1.7 Python对不可变类型施加的把戏
Skip
Note: 比较字符串或者整数是否相等时,应该用==,而不是is
二. 相关资料
2.1 使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用。如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝。
2.2 Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。
三. 阅读后感
本章节收获知识很多,主要有两点,第一:变量不是盒子,而是视为便利贴,也就是说变量和变量名称是不同的。第二:默认做浅复制,理解浅复制 copy() 和深复制 deepcopy() 之间的区别。
参考:
1. 图解 Python 深拷贝和浅拷贝
2. 深入分析 Python 的垃圾回收机制
3. Python弱引用使用介绍
对象与对象名称之间的区别。名称不是对象,而是单独的东西。
目录:
内容回顾
相关资料
阅读后感
正文:
一. 内容回顾
1.1 变量不是盒子
变量不是盒子,可视作便利贴
# 变量不是盒子,应该把变量视作便利贴 def node_01(): a = [1, 2, 3] b = a b.append(4) print a print b # a = [1, 2, 3, 4] # b = [1, 2, 3, 4]
1.2 标识、相等性和别名
比较数值: ==
比较标识: is
1.3 默认做浅复制
# 浅复制 copy 只拷贝父对象,不会拷贝对象的内部的子对象。 # 深复制 deepcopy 拷贝对象及其子对象 def node_02(): l1 = [3, [66, 55, 44], (7, 8, 9)] l2 = list(l1) l1.append(100) l1[1].remove(55) print 'l1:', l1 print 'l2:', l2 l2[1] += [33, 22] l2[2] += (10, 11) print 'l1:', l1 print 'l2:', l2
输出结果:
/usr/bin/python /Users/jenkins/Desktop/Timen/Python/Demo/Study_0502_02.py l1: [3, [66, 44], (7, 8, 9), 100] l2: [3, [66, 44], (7, 8, 9)] l1: [3, [66, 44, 33, 22], (7, 8, 9), 100] l2: [3, [66, 44, 33, 22], (7, 8, 9, 10, 11)] Process finished with exit code 0
参考解释图:
1.4 函数的参数作为引用时
Skip
1.5 del和垃圾回收
Python使用了垃圾回收器来自自动销毁那些不再使用的对象。每个对象都有一个引用计数,当这个计数为0时Python能够安全地销毁这个对象。
1.6 弱引用
弱引用是避免循环引用的一种方法,弱引用不记录引用计数。当一个对象只有弱引用时可能被垃圾回收器回收。
使用weakref模块,你可以创建到对象的弱引用,Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象。
1.7 Python对不可变类型施加的把戏
Skip
Note: 比较字符串或者整数是否相等时,应该用==,而不是is
二. 相关资料
2.1 使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用。如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝。
2.2 Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。
三. 阅读后感
本章节收获知识很多,主要有两点,第一:变量不是盒子,而是视为便利贴,也就是说变量和变量名称是不同的。第二:默认做浅复制,理解浅复制 copy() 和深复制 deepcopy() 之间的区别。
参考:
1. 图解 Python 深拷贝和浅拷贝
2. 深入分析 Python 的垃圾回收机制
3. Python弱引用使用介绍
相关文章推荐
- 流畅的python第八章对象引用,可变性和垃圾回收
- Python 对象引用、可变性和垃圾回收
- 基于Python对象引用、可变性和垃圾回收详解
- 第8章 对象引用、可变性和垃圾回收
- 垃圾回收之判断对象否需要被回收(根搜索算法和引用搜索算法)
- 图解JVM在内存中申请对象及垃圾回收流程
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- Python引用复制,参数传递,弱引用与垃圾回收
- Java虚拟机笔记(二):GC垃圾回收和对象的引用
- jvm垃圾收集器回收什么样的对象以及各种引用
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- Java对象的引用与垃圾回收
- 图解JVM在内存中申请对象及垃圾回收流程
- JVM在内存中申请对象及垃圾回收流程
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
- WeakReference--弱引用,即在引用对象的同时仍然允许通过垃圾回收来回收该对象。
- 面向对象_引用类型_内存分析_垃圾回收JAVA028-033
- Python的垃圾回收机制(四)之回收流程源码剖析
- python 基础学习笔记(四) 引用及垃圾回收
- Java基础复习笔记 对象状态、引用种类、垃圾回收形式02