【问题标题】:Python Identity operators with variables and datastructures具有变量和数据结构的 Python 标识运算符
【发布时间】:2019-12-09 11:20:04
【问题描述】:

我有以下代码:

a = []
b = a

当我编译以下代码时,我得到了这个:

print(b is a) --> True
print(b is []) --> False

如果 b = a 那么b is [] 不应该返回True

【问题讨论】:

  • is 表示引用相等,因此两个事物都引用相同对象,两个单独的列表相同对象。跨度>
  • 不,一点也不。平等不是身份
  • 一个字面量是产生一个新对象还是引用一个现有对象基本上是一个实现细节。不要将is 与文字一起使用。
  • 我应该说,对于 immutable 值,它是一个实现细节。对于可变值,缓存一个值会导致问题。
  • 并非所有[] 都是同一个对象。 [] 只是一个空列表,可以通过多种方式构造。

标签: python identity-operator


【解决方案1】:

试试看:

    a = []
b = a


print(id(a))
print(id(b))
print(id([]))

你会看到 a 和 b 指向同一个对象,而 next [] 是不同的。检查if b看b是否不是空列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2021-05-13
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多