gpt4 book ai didi

Python:默认比较

转载 作者:太空狗 更新时间:2023-10-29 20:11:40 25 4
gpt4 key购买 nike

在 Python 2.7 中,我定义了一个空的新式类:

In [43]: class C(object): pass
....:

然后创建新类的实例列表:

In [44]: c = [C() for i in xrange(10)]

然后尝试对列表进行排序:

In [45]: sorted(c)
Out[45]:
[<__main__.C object at 0x1950a490>,
<__main__.C object at 0x1950a4d0>,
...
<__main__.C object at 0x1950aad0>]

令人惊讶的是,尽管我还没有定义一种比较 C 实例的方法,但排序并没有报错:

In [46]: dir(C())
Out[46]:
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']

那里到底发生了什么,这种(可以说是令人惊讶的)行为的基本原理是什么?

最佳答案

我认为唯一的理由是可以方便地对对象进行排序,例如用作具有某些默认行为的字典键。语言定义中的相关章节在这里:https://docs.python.org/2/reference/expressions.html#not-in

"The choice whether one object is considered smaller or larger than another one is made arbitrarily but consistently within one execution of a program."

因此,当前使用内存地址比较对象的事实只是一个无法指望的实现细节。唯一的保证是顺序在执行期间保持一致。

关于Python:默认比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com