В Python очень важно, чтобы новички узнали, какие объекты являются «неизменяемыми» и не могут быть изменены, а какие «изменяемыми» и могут быть изменены - в последнем случае каждые ссылка на объект видит то же самое изменение.Это действительно, кажется, смущает новичков.«Я невинно назвал эту функцию, которую написал, и внезапно моя копия списка тоже изменилась!»
Так что у Python есть соглашение: неизменяемые объекты, когда вы просите их внести корректировку, возвращает недавно созданный объект, который является ответом - так:
a = 'my string'
b = a.replace('y', 'e')
заставляет b
получить совершенно новую строку, в то время как a
сохраняет свое первоначальное значение.Очевидно, что такие методы должны возвращать значение, поскольку вы никогда не сможете увидеть это изменение, проверив сам исходный неизменный объект.
Но когда вы просите изменяемый объект изменить себя, он не возвращает себя, потому что не нужно - вы можете увидеть изменение, просто посмотрев на исходный объект снова!Это важный семантический сигнал в Python: если такой метод, как append()
, не возвращает новый объект, вы можете увидеть это изменение, просто взглянув на старый объект, и , так же как и все остальные со ссылкой настарый объект.