Я отследил ошибку в моей программе до строки, где я проверял наличие объекта в списке объектов. Строка всегда возвращала False, что означало, что объекта нет в списке. На самом деле, это продолжалось, даже когда я делал следующее:
class myObject(object):
__slots__=('mySlot')
def __init__(self,myArgument):
self.mySlot=myArgument
print(myObject(0)==myObject(0)) # prints False
a=0
print(myObject(a)==myObject(a)) # prints False
a=myObject(a)
print(a==a) # prints True
Раньше я использовал глубокую копию, но у меня недостаточно опыта работы с Python, чтобы знать, когда это необходимо и не нужно, или механически, в чем разница. Я также слышал о мариновании, но никогда не использовал его. Может кто-нибудь объяснить мне, что здесь происходит?
О, и еще одна вещь. Линия
if x in myIterable:
вероятно проверяет равенство между x и каждым элементом в myIterable, верно? Так что, если я могу изменить воспринимаемое равенство между двумя объектами, я могу изменить вывод этой строки? Есть ли встроенный для этого и всех других встроенных операторов?