我正在练习中期,我遇到了这个:
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
谢谢!
答案 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的实例不同。