Теоретически вопрос об обновлении строковых элементов в кортежах - PullRequest
0 голосов
/ 23 апреля 2020

Теоретически вопрос о кортежах. Если у меня есть кортеж, который конструируется из строки:

tupl = ('Hello', 'World')

, то это правильно, подумайте, если я хочу, чтобы все буквы в нижнем регистре использовали один и тот же кортеж, или я должен создать новый кортеж и скопировать строчную строку текущего кортеж?

tupl = [string.lower() for string in tupl]

или:

new_tuple = [string.lower() for string in tupl]

1 Ответ

1 голос
/ 23 апреля 2020

Кортежи являются неизменяемыми, что означает, что они не могут быть изменены, только заменены.

В вашем первом фрагменте вы фактически создаете список, но давайте сделаем его кортеж ради примера:

tupl = tuple(string.lower() for string in tupl)

Если вы запустите id(tupl) до и после этой строки, вы увидите, что идентификатор изменяется, так как эта строка создает новый кортеж, но присваивает ему то же имя, tupl. Например:

tupl = ('Hello', 'World')
old_id = id(tupl)
print(old_id)
tupl = tuple(string.lower() for string in tupl)
new_id = id(tupl)
print(new_id == old_id, new_id)

Пример вывода:

140562289770120
False 140562192307208

Единственное отличие во втором фрагменте состоит в том, что он назначает новый объект новому имени и оставляет старое имя нетронутым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...