用于非字符串的Python实习生

Nei*_*l G 8 python language-features

为什么Python intern内置仅用于字符串?应该可以扩展intern到可清除和可比较的类,对吗?

Ben*_*Ben 14

实习的目的是通过比较它们的内存地址来比较它们; 确保永远不会创建具有相同值的两个对象(当程序请求创建与现有对象具有相同值的第二个对象时,它会接收对预先存在的对象的引用).这要求你实习的东西是不变的 ; 如果实习对象的价值可能会发生变化,那么按地址进行比较是行不通的.

在Python中,不可能强制实现用户定义的类实例的不变性,因此实习它们是不安全的.我怀疑这是主要的理论原因实习生没有涵盖类实例.

其他内置的不可变类型在单个机器级操作(int,float等)中是可比较的,或者可以包含可变值(tuple,frozenset)的不可变容器.没有必要实习前者,后者也不能安全地实施.