is 比较对象内存地址(对象的id)
== 比较值 (eq)
优先级从高到低为:1. 实例本身(instance)2. 类(class)3. super class, 继承关系越近, 越先定义, 优先级越高.
先编译成可执行文件,再运行。
在运行期间编译。
引用计数。
import sys
a = []
# 两次引用,一次来自 a,一次来自 getrefcount
print(sys.getrefcount(a))
def func(a):
# 四次引用,a,python 的函数调用栈,函数参数,和 getrefcount
print(sys.getrefcount(a))
func(a)
# 两次引用,一次来自 a,一次来自 getrefcount,函数 func 调用已经不存在
print(sys.getrefcount(a))
########## 输出 ##########
2
4
2

通过 “标记-清除” 解决容器对象可能产生的循环引用问题;(双向链表可达性分析)
通过 “分代回收” 以空间换时间的方法提高垃圾回收效率
不立刻产生全部结果,节省内存,效率高。Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
两种方法:1. 把列表生成器的 [] 改成括号 2. yield (函数中包含 yield)。每次从 yield 执行,遇到 yield 返回。通过 StopIteration 里的 value ,获取返回值
g = (x * x for x in range(10))
def fib(n):
i, a, b = 0 , 0, 1
for i in range(n):
yield b
a, b = b, a+ b
return
for n in fib(5):
print(n)
g = fib(5)
while True:
try:
x = next(g)
print("g:", x)
except StopIteration as e:
print("return value", e.value)
break
迭代器 能通过next 访问值的对象: