Python列表和平等

时间:2014-10-26 23:59:35

标签: python list equality

我正在练习中期,我遇到了这个:

the_cake = [1,2,[3],4,5]
a_lie = the_cake[1:4]
the_cake = the_cake[1:4]
great = a_lie
delicious = the_cake
moist = great[:-1]

在Python解释器中运行此代码之后,原因是:

the_cake.append == a_lie.append
False

我的想法是,他们是平等的方法,虽然不是“IS”,但应该实现平等。

由于实例化,这可能会评估为False? 如果这是真的,那么在比较时,类属性是否会评估为True? 这是列表对象的特例吗?


随访: 根据这个: Is there a difference between `==` and `is` in Python?

“如果两个变量指向同一个对象,则IS将返回True,如果变量引用的对象相等,则返回=。”

然后,List类的方法指向“append”方法的实例?

因此,如果我定义一个函数x(参数),每次调用它时,它都是相同的,因为它是分配给不同变量的同一个对象,对吗?

然后对于一些等效变量“parameter”:

x(parameter) == x(parameter)
True

谢谢!

4 个答案:

答案 0 :(得分:2)

这些方法与其各自的对象实例位于不同的位置。例如,我们有:

a = []
b = []

所以我们有:

>>> a.append == b.append
False

及其各自的位置见:

>>> a.append
<built-in method append of list object at 0x7f7c7c97d560>
>>> b.append
<built-in method append of list object at 0x7f7c7c97d908>

请注意不同的地址。

答案 1 :(得分:1)

Python 2.x:基于对象在内存中的地址,type objects实现rich comparisons的函数。

Python 3.x:注意功能不再可订购。因此,例如,the_cake.append > a_lie.append将抛出错误消息。

答案 2 :(得分:1)

这两个答案都有效,但也请查看:

>>> a = []
>>> b = a
>>> a.append == b.append
True

答案 3 :(得分:1)

在python中切片列表总是返回一个新列表。 the_cake[1:4]也会返回一个新列表。因此,如果每次调用相同的切片并不意味着它将返回相同的列表。无论您是否一次又一次地执行相同的切片,每次调用它时都会返回一个新列表。

即使您将同一切片the_cake[1:4]分配给a_lie以及分配给自身(即the_cake),两者都指的是与另一个不同的新列表。 因此,列表在创建期间分配了不同的内存位置。如果您选中id(the_cake) == id(a_lie),则会返回False

所以现在当你引用两个实例的追加时,它们也会有所不同。即使引用相同的方法,也可以从两个不同的实例中引用它。因此,它将为被调用的方法创建不同的实例。因此,在调用the_cake.append时引用的实例与a_lie.append的实例不同。