对码当歌,猿生几何?

Python内存管理(1)

一、简介
Python是一门动态类型的、面向对象的语言,一切皆对象。
内置函数id(),用于返回该对象的内存地址。

a=1
b=1
print(id(a),id(b))

二、分析
==与is的区别:
Python对于[-5,256]的整数对象缓存在small_ints的链表中,引用这些整数时不再重新创造对象。
is用于判断两个引用指向的对象,即是否指向同一内存

from sys import getrefcount
a = 257
b = 257
print(a is b)
>>>flase

==比较的是两个对象的内容是否相等,默认调用_eq_()

print(a == b)
>>>True

三、代码块

c =257
def foo():
    a = 257
    b =257
    print(a is b)
    print (a is c)
import dis
foo()
dis.dis(foo)

由结果可以得出c与foo为不同的代码块,在一个代码块中创建的整数对象,若已经存在则直接引用。

阅读更多