在分配不可变对象(例如字符串)时,Python语言的每种实现都可以自由地做出自己的取舍-制作一个新对象,或者找到一个相等的对象,并使用一个以上的引用,从该语言的角度来看都很好观点看法。当然,在实践中,现实世界中的实现会做出合理的折衷:在定位这样的对象时,再引用一个合适的现有对象既便宜又容易,如果要找到合适的现有对象(可能会可能不存在),看起来可能需要很长时间才能搜索到。
因此,例如,在一个函数中多次出现相同字符串文字(在我所知道的所有实现中)将使用“对同一对象的新引用”策略,因为在构建该函数的常量池时,它非常容易快捷避免重复;但是跨单独的功能执行此操作可能是一项非常耗时的任务,因此,现实世界中的实现要么根本不执行此操作,要么仅在某些启发式确定的情况子集中执行此操作,而这些子集可以希望我们合理地权衡编译时间(通过搜索相同的现有常量而降低)与内存消耗(如果不断制作新的常量副本会增加内存消耗)。
我不知道Python的任何实现(或与此有关的其他具有常量字符串的语言,例如Java)在从文件中读取数据时会麻烦识别可能的重复项(以通过多个引用重用单个对象)的麻烦- -这似乎不是一个有希望的折衷办法(这里您要付出运行时的费用,而不是编译时的费用,所以这种折衷的吸引力就更小了)。当然,如果你知道(得益于应用层面的考虑),这样的不可变对象是大,非常容易出现很多重复,你可以很容易地实现自己的“常量池”战略(实习生可以帮助您为字符串做,但不难为自己而生,例如具有不可变项的元组,巨大的长整数,



