[英]How sort method works internally in python?
我知道对你们中的一些人来说这可能是一个愚蠢的问题,但对我来说却是一个困惑。 它是如何在不分配给变量的情况下工作的,以及它的更新值如何可用。
此代码打印排序列表
data=[23,11,32,89,52,99]
data.sort()
print(data)
它的工作方式与此代码相同:
class Thing:
def __init__(self, value):
self.value = value
def modify(self):
self.value += 1
data = Thing(5)
print(data.value) # prints '5'
data.modify()
print(data.value) # prints '6'
基本上,它修改对象的内部状态。 列表对象将其值存储在内存的某个区域(即,某个内部变量中),而sort
方法以对列表值进行排序的方式与该内部变量混淆。
您的变量data
是一个列表。 列表有一个名为sort
的方法,它对列表进行排序并更新这些值。 您可以通过输入dir(data)
甚至直接在数据类型dir(list)
上查看所有方法。
这与sorted()
函数不同,后者对列表进行排序并返回排序后的值,但不更新原始列表。
data=[23,11,32,89,52,99]
print(sorted(data)) # Returns sorted list
print(data) # Original is not modified
data.sort() # Modifies original
print(data)
那是因为list.sort()
方法就地修改了列表。 其他方法如sorted()
不会修改列表。 例如:
data=[23,11,32,89,52,99]
sorted(data)
print(data)
Out:
[23, 11, 32, 89, 52, 99]
分配:
data=[23,11,32,89,52,99]
data = sorted(data)
print(data)
Out:
[11, 23, 32, 52, 89, 99]
所以这取决于方法的结构。 希望能帮助到你。
列表是一个对象
class list(object):
"""
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
"""
def append(self, p_object): # real signature unknown; restored from __doc__
""" L.append(object) -> None -- append object to end """
pass
def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__
""" L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.