为什么Pythonintern
仅内置字符串?应该可以扩展intern
到可哈希和可比较的类,对吗?
内联事物的目的是能够通过比较它们的内存地址来进行比较。您要确保永远不要创建两个具有相同值的对象(当程序请求创建一个与现有对象具有相同值的第二个对象时,它会收到对先前存在的对象的引用)。这要求你要实习的东西是
不变的 ; 如果一个被拘禁对象的值可以改变,那么按地址比较它们是行不通的。
在Python中,无法强制执行用户定义的类实例的不变性,因此,对它们进行实习并不安全。我怀疑这是实习生不覆盖类实例的主要理论原因。
其他内置的不可变类型或者已经可以在单个机器级别的操作中进行比较(int,float等),或者 可以包含可变值的
不可变容器(元组,frozenset)。无需实习前者,也不能安全地实习后者。
问题内容: 管这个问题在实际中没有任何实际用途,但我对Python如何进行字符串实习感到好奇。我注意到以下内容。 这是我所期望的。 您也可以这样做。 那真是太聪明了! 但是你不能这样做。 Python为什么不评估,并意识到它s1与指向相同的地址相同?最后一个块到底在做什么False呢? 问题答案: 这是特定于实现的,但是你的解释器可能是内部编译时常量,而不是运行时表达式的结果。 接下来,我使用CP
来自String类的intern方法的javaDocs: 调用intern方法时,如果池中已经包含一个由equals(Object)方法确定的等于此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中并返回对此String对象的引用。 考虑以下用例: 有人能解释为什么为真而以下为假吗: <代码>系统。出来println(fifth==第五个.intern()) <代码
本文向大家介绍python清除字符串里非字母字符的方法,包括了python清除字符串里非字母字符的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python清除字符串里非字母字符的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍python清除字符串里非数字字符的方法,包括了python清除字符串里非数字字符的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。
问题内容: 以下两段代码是否相同? 问题答案: 它们具有相同的 最终结果 ,但它们并不相同(它们将产生不同的字节码;版本实际上经过了这些步骤,生成了新的字符串对象,然后对其进行中间化)。 来自以下两个相关引号: 调用该方法时,如果池中已经包含与该方法确定的对象相等的字符串,则返回池中的字符串。否则,将此对象添加到池中,并返回对该对象的引用。 所有文字字符串和字符串值常量表达式都将被插入。 因此,
我试图理解String#intern方法。现在,这引起了更多的混乱。 上面的代码打印为true。如果我注释第3行并取消注释第5行,则打印为false 对于第3行,将检查SCP,并将字符串添加到SCP中。但在这种情况下,s2如何等于s4呢 s2仍在引用堆中指向SCP常量的对象。正当 有人能解释一下发生了什么吗?我已经经历了不同的SO问题,但仍然无法理解。 EDIT 我只是想了解实习生方法。我知道b/