引言
学习python时存在一些python存储机制的疑惑,有机会进行梳理便于自己和他人学习,故写下此篇博客
Python万物皆对象
所谓对象就是一种存储方式,变量一般存储在栈中,对象存储在堆中,对象内容包含:id,type,value。python定义变量不声明是因为对象中已经存在type类型,因此不用声明。栈中变量停止使用后即可释放,而堆中对象会通过垃圾回收机制进行空间释放。
整数缓存机制
工具:pycharm
在python console中整数缓存[-5,256],也就是使用此范围的数据,将从缓存表中直接取得,所有变量通过引用使用数字将使用同一个对象,id相同,如下图1。而超出数据范围的数字将重新创建对象,不同的变量对应的对象将不同,如图2。
上述是在python console中,而在代码块中的数字缓存范围为[-∞,+∞],因此所有的方案都是上述第一种形式,这里要特别注意一下。区分两种形式方法使用is
,is比较id是否相同,==比较value是否相同。
字符串驻留机制
仅保存一份相同且不可变字符串的方法,不同的值存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制。
a = 'abd'
b = 'abd'
a is b # True
a = 'a#'
b = 'a#'
a is b # False