Я экспериментировал с сортировкой Python по ключу.
Я заинтересован во внутренней работе алгоритма.
Это примерно эквивалентно преобразованию Шварца (Decorate-Sort-Undecorate) ?
В частности:
- Ключи спецификации извлекаются только один раз. Можно ли предположить, что это происходит до того, как произойдет какое-либо сравнение?
- Как извлеченные ключи хранятся в памяти? Как кортежи
(key, orginal_value)
или использует какой-то другой метод.
Я использовал следующую тестовую программу
class Isbn:
def __init__(self, isbn_num):
self.isbn_num = isbn_num
def __lt__(self, other):
print(f"__lt__ {self.isbn_num} {other.isbn_num}")
return self.isbn_num < other.isbn_num
def __repr__(self) -> str:
return f'Isbn({self.isbn_num})'
class Book:
def __init__(self, isbn):
self.isbn = Isbn(isbn)
def __repr__(self) -> str:
return f'Book({self.isbn})'
@property
def key(self):
print(f"key {self.isbn}")
return self.isbn
books = [Book(5), Book(10), Book(6), Book(2)]
books.sort(key=lambda b: b.key)
print(books)
Что дает следующий вывод:
key Isbn(5)
key Isbn(10)
key Isbn(6)
key Isbn(2)
__lt__ 10 5
__lt__ 6 10
__lt__ 6 10
__lt__ 6 5
__lt__ 2 6
__lt__ 2 5
[Book(Isbn(2)), Book(Isbn(5)), Book(Isbn(6)), Book(Isbn(10))]