Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果字符串以正常方式留在内存中,如何解释这种情况?
s1=';;' s2=';;' s1==s2,s1 is s2 (True, False) s1=';' s2=';' s1==s2,s1 is s2 (True, True)
在第一种情况下,s1和s2具有相等的值,但不是同一个实例。
s1
s2
在第二种情况下,s1ands2也有相同的值,但是由于它们只是单字符串,并且每个字符都与自身相同,因此 Python 将其解释为检查字符是否是相同的字符,它们是。
Python 这样做是因为它对小数字和单字符使用缓存。
您可以阅读有关此问题的更多信息,特别是此答案。
==运算符检查值的相等性。
==
is检查两个实体是否指向相同的内存位置。
is
现在,如果实体本质上是相同的对象,例如s1=s2=";;",那么s1 is s2将为 True。这很容易理解。
s1=s2=";;"
s1 is s2
但是我们直观地认为,分别初始化的两个实体会有不同的内存位置。但它并不总是正确的。
为了提高性能,python 只是返回一个对现有对象的引用,当我们创建一个 int(对于某个范围的值)、string(再次针对某个范围)。