Python中的可变类型和不可变类型是如何存储的?小数据池对于整形存储有什么影响?Python解释器为了提高字符串使用的效率和使用性能又做了哪些优化?本文将为你慢慢道来,让你深入了解Python中的内存驻留。接下来话不多说,直接进入正题。
1可变类型和不可变类型
咱们先来复习一下Python中的不可变类型和可变类型。可变类型:列表、字典、可变集合,可以通过操作原处修改,而不用创建新的对象;不可变类型:数字、字符串、元组、不可变集合,不支持原地修改。看下面的例子:
从上图能够看到,我们可以对可变类型进行原地修改,id不变;而去操作不可变对象时,因为它不可原地修改,内部没有实现__iadd__()方法,所以a += 1等同于a = a + 1,创建了新的对象,id改变。关于id这里需要注意,我们用id函数获取的是对象的唯一标识符,只不过在CPython解释器下,刚好返回的是对象的内存地址。
我们可以看到,对于不可变类型,每次修改一次就要创建一个新的对象。如果过多的进行修改操作无疑会消耗很大的内存。出于提高效率,减少内存消耗的考量,Python实现了自己的内存驻留机制。
2代码块的缓存机制
我们先来看Python官方对于代码块的定义:
https://docs.python.org/3/r