|
|
1
3
文件中的典型记录如下:
这意味着大多数不变的对象都是字符串,只有
对于小整数(
这些规则对于字符串来说更为复杂——正如@timgeb所指出的,它们是被实习生使用的。有 a greate article about interning 即使是关于蟒蛇2.7-但从那时起没有太大变化。简而言之,最重要的规则是:
以上所有内容都是实现细节,但考虑到这些细节,我们得到以下
这是对当前行为的解释,只有一些对象被“缓存”。 但是为什么python不缓存所有创建的字符串/整数呢?
让我们从整数开始。为了能够在已经创建整数的情况下快速查找(比
因为字符串需要更多的内存,所以查找数据结构的相对(内存)成本并不高。但是实习一个1000个字符的字符串没有任何意义,因为随机创建的字符串拥有相同字符的概率几乎是
另一方面,如果使用哈希字典作为查找结构,则哈希的计算将采用
因此,python做了一个权衡,在大多数情况下都可以很好地工作——但在某些特殊情况下,它不可能是完美的。然而,对于那些特殊的场景,您可以使用
注意:拥有相同的ID并不意味着成为同一个对象,如果两个对象的生存时间不重叠,-那么您在问题中的推理不是绝对可靠的,但是在这种特殊情况下,这并不重要。 |
|
|
2
4
中有736461个元素
因此,您正在添加
既然什么
在您的具体案例中,这个数字是736461-690072==46389。 缓存小的不可变对象(字符串、整数)是一个不应该依赖的实现细节-但下面是一个演示:
最后,程序中可能存在语义错误。你想用它做什么?
|
|
|
max · 子类方法是如何在CPython中实现的? 9 年前 |