【发布时间】:2019-05-26 10:31:26
【问题描述】:
对具有相同值的字符串使用 is 运算符返回 True,但对具有相同元素的列表使用 is 运算符返回 False。为什么?
a = 'banana'
b = 'banana'
c = ['b', 'a']
d = ['b', 'a']
print(a is b)
print(c is d)
如果 is 运算符比较操作数是否引用同一个对象,则两个 print 语句都应返回 True。但是,列表并非如此。因此,这两个列表似乎没有引用同一个对象。有什么具体原因吗?
【问题讨论】:
-
“如果 is 运算符比较操作数是否引用同一个对象,则两个 print 语句都应该返回 True”——这并不是两个事物是同一个对象的含义。
-
如果你使用
id(c)和id(d),那就不一样了。因为,这些是 2 个单独的列表实例。在字符串的情况下,两者都指向同一个实例(print(id(a))print(id(b)))。阅读 python 中的字符串实习。此外,is进行身份比较,==进行值比较。如果你执行print(c == d),它会返回True。 -
这是因为 'is' 运算符只比较
identity它不会迭代。 -
我知道字符串指向单独的实例而列表不指向,这就是
is运算符抛出不同结果的原因。我想知道为什么——作为重复链接的问题并没有解决这个问题。用户@reportgunner 的回答地址虽然有点。
标签: python python-3.x