为什么Python的intern
仅针对字符串内置?应该可以将intern
扩展到可清除和可比较的类,对吗?
答案 0 :(得分:14)
实习的目的是通过比较它们的内存地址来比较它们;确保永远不会创建具有相同值的两个对象(当程序请求创建与现有对象具有相同值的第二个对象时,它会接收对预先存在的对象的引用)。这要求你实习的东西是不可变的;如果实习对象的价值可能会发生变化,那么按地址进行比较是行不通的。
在Python中,不可能强制实现用户定义的类实例的不变性,因此实习它们是不安全的。我怀疑这是主要的理论原因实习生没有涵盖类实例。
其他内置的不可变类型在单个机器级操作(int,float等)中是可比较的,或者可以包含可变值的不可变容器(元组,冻结集)。没有必要实习前者,后者也不能安全地实习。
答案 1 :(得分:1)
没有技术上的原因,比如,一个元组不能被实习,尽管我认为在现实世界中这与字符串文字相比没什么价值,并且它的实际价值甚至更低。用户定义的类型。让它发挥作用可能不值得付出努力。
答案 2 :(得分:0)
仅支持字符串,因为实习依赖于基于指针的object identity test。可以比较其他类型的哈希值,但是对象本身永远不会与身份测试相匹配。这是真的,因为即使它们可能是相同的,它们也不是同一个对象。