У меня есть интересный вопрос, который я вообще не понимаю, почему это происходит.Итак, я пытаюсь отсортировать список кортежей, где первый элемент кортежа является объектом, на основе атрибутов в указанных объектах.Итак, я создал следующий код для проверки этой функциональности:
class s(object):
def __init__(self, name):
self._name = name
def get_name(self):
return self._name
def val(x):
#This used in place of a lambda
return x[0]._name
e1 = s("Fred")
e2 = s("Bill")
print(e2.get_name())
list1 = [(e1, 3), (e2, 4)]
for n in list1:
print(val(n))
list2 = sorted(list1, key = val)
print(list2)
print(list2[0] == e2)
print(e2.get_name)
print(e2._name)
С выводом этого:
Bill
Fred
Bill
[(<__main__.s object at 0x0000002AC47D6438>, 4), (<__main__.s object at 0x0000002AC47D6240>, 3)]
False
<bound method s.get_name of <__main__.s object at 0x0000002AC47D6438>>
Bill
Я понятия не имею, почему я получаю памятьадреса атрибутов как первые элементы моих кортежей после сортировки, и я просмотрел SO, и с этим кодом действительно не должно быть проблем, поскольку он выглядит точно так же, как и многие другие посты по этому вопросу.Кто-нибудь может помочь мне здесь и указать, почему это происходит?Я ожидаю этот вывод:
print(list2) #After sorting
OUTPUT:
[(e2, 4), (e1, 3)]