我目前正在学习3.2版本的Python。
给定两个列表变量,如何区分变量是否引用相同列表与相同值的两个单独列表。
例如:
>>> foo = [1,2,3,4]
>>> bar = foo
>>> foo.append(5)
>>> foo
[1, 2, 3, 4, 5]
>>> bar
[1, 2, 3, 4, 5]
>>> foo == bar
True
在上文中,“foo”和“bar”显然引用了相同的列表。 (通过在foo中附加“5”并看到该变化反映在条形图中来证明)。
现在,让我们定义第三个列表,名为“other”,具有相同的值:
>>> other = [1,2,3,4,5]
>>> other == foo
True
它们看起来像同一个列表,因为比较运算符在这里也返回True。但是如果我们修改“其他”,我们可以看到它是一个不同的列表,其中任何一个变量的变化都不会影响另一个。
>>> other.append(6)
>>> other == foo
False
>>> other
[1, 2, 3, 4, 5, 6]
>>> foo
[1, 2, 3, 4, 5]
我认为知道两个变量何时是彼此的别名而不是结构相同是有用的。但我怀疑我可能会误解其他语言的基本内容。
答案 0 :(得分:6)
您可以使用is
operator来确定对象标识:
>>> foo is bar
True
>>> foo is other
False
引用文档:
运算符
is
和is not
测试对象标识:x is y
当且仅当x
和y
是同一对象时才为真。x is not y
产生反向真值。
检测两个变量是否引用同一个对象(例如列表)的另一种方法是检查id()
function的te返回值:
>>> id(foo)
4432316608
>>> id(bar)
4432316608
>>> id(other)
4432420232