Один вопрос, который я столкнулся сегодня, что на самом деле испытание неизменности кортежей в Python:Являются ли кортежи действительно неизменными в Python?
Интервьюер: Являются ли кортежи неизменны в Python?
Me: Да
Интервьюер: Так что же
print(t1)
здесь напечатать?t1 = (4, 5) t1 = t1 + (91, 10) print(t1)
Me:
(4, 5, 91, 10)
Интервьюер: Как неизменность кортеж затем определить такое поведение?
Me: Это не имеет ничего общего с неизменностью,
t1
ярлык со ссылкой на новый кортеж.Интервьюер:
>>> t = (1, 2, [3, 4]) >>> t[2] += [5, 6]
Что будет дальше?
Me:
TypeError
поднимаютИнтервьюер: Что будет значение
t
быть после этого?Me:
(1, 2, [3, 4])
или(1, 2, [3, 4, 5, 6])
может быть, не уверенИнтервьюер: Что заставило вас думать, значение изменится на
(1, 2, [3, 4, 5, 6])
и что произойдет, если я пишу>>> t[2] = t[2] + [5, 6]
будет
t2
все еще be(1, 2, [3, 4, 5, 6])
после этого работа?
Да, кортежи неизменяемы, но они могут содержать ссылки на изменяемые объекты. – jonrsharpe
Кортеж как контейнер является неизменным, это означает, что вы не можете удалить или добавить к нему предметы, но элементы, которые он содержит, могут быть изменены. Также читайте: [Почему 'a_tuple [i] + = ['item']' вызывает исключение, когда сложение работает?] (Https://docs.python.org/2/faq/programming.html#why-does -a-tuple-i-item-raise-the-exception-when-the-addition-works) –