【问题标题】:Why do strings with the same value refer to the same object but lists don't? [duplicate]为什么具有相同值的字符串引用相同的对象而列表不引用? [复制]
【发布时间】: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


【解决方案1】:

我相信这是因为lists 是可变的(可以修改,例如my_list.append()my_list.pop()),而字符串不能。

查看this video

【讨论】:

  • 也就是说,存储两个完全相同的字符串是没有意义的,因为它们不能被修改,但是存储两个列表是有意义的,因为您可能想要修改其中一个。跨度>
  • 您对答案的评论正是我想要的。初始化列表两个不同的对象确实有意义,因为它们可以被变异。谢谢。
猜你喜欢
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2017-10-11
相关资源
最近更新 更多