@Rild2

Почему изменение переменной в списке не затрагивает переменную вне этого списка?

В общем, недавно шерстил библиотеку random и смотрел как она работает. Всякие randrange, randint и тому подобное.
И решил посмотреть, можно ли изменить значение в массиве с помощью такой конструкции:
from random import randrange
a, b, c = 4, 6, 8
r = [a, b, c]
r[randrange(0, 3)] = 1

По идее, всё должно быть очень просто: одна переменная из списка [a, b, c] станет единицей.
Однако! Этот код:
print(r)
print(a, b, c)

Выводит:
[4, 1, 8]  # Ну или другое число
4, 6, 8

Почему так происходит? В массиве что, создаются свои локальные переменные или как?
И ещё, как можно обратиться к этой изменённой переменной? Причём без использования индексов.
r[r.index(a)] не работает, я проверял.
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Ваш код записал во второй элемент списка ссылку на число 1 вместо ссылки на число 6, которая там была раньше, а в перменной b всё ещё хранится ссылка на 6. Непонятно, что вас удивляет.
Ответ написан
TalismanChet
@TalismanChet
Лицо зла
from random import randrange
a, b, c = 4, 6, 8
r = ['a', 'b', 'c']
exec("{} = 1".format(r[randrange(0, 3)]))
print(a, b, c, r)

и всё должно сработать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы