1

如果字符串以正常方式留在内存中,如何解释这种情况?

s1=';;'
s2=';;'
s1==s2,s1 is s2
(True, False)

s1=';'
s2=';'
s1==s2,s1 is s2
(True, True)
4

2 回答 2

2

在第一种情况下,s1s2具有相等的值,但不是同一个实例。

在第二种情况下,s1ands2也有相同的值,但是由于它们只是单字符串,并且每个字符与自身相同,因此 Python 将其解释为检查字符是否是相同的字符,它们是。

Python 这样做是因为它对小数字和单字符使用缓存。

您可以阅读有关此问题的更多信息,特别是此答案

于 2013-07-10T11:02:39.067 回答
0

==运算符检查值的相等性。

is检查两个实体是否指向相同的内存位置。

现在,如果实体本质上是相同的对象,例如s1=s2=";;",那么s1 is s2将为 True。这很容易理解。

但是我们直观地认为,分别初始化的两个实体会有不同的内存位置。但它并不总是正确的。

为了提高性能,python 只是返回一个对现有对象的引用,当我们创建一个 int(对于某个范围的值)、string(再次针对某个范围)。

于 2013-07-10T11:27:37.230 回答