переменные Python

1

У меня есть простой вопрос. Я прочитал строку из файла и занесен в список (named: formula). Затем я сохранил (формулу) в другой переменной (fstore = formula), чтобы сохранить ее позже. Затем я вносил изменения в формулу, и, как выясняется, fstore также меняется. Почему это происходит? Я хочу, чтобы fstore оставался постоянным. Я не использовал fstore нигде в программе. Неправильно ли мое назначение (fstore = formula)?

Джей

Теги:
variables
variable-assignment

2 ответа

5

Важное отличие здесь заключается в том, что между изменяемыми и неизменяемыми типами данных. В python список изменен, а кортеж является неизменным. Это означает, что когда вы "изменяете" значение кортежа следующим образом:

t1 = (1, 2, 3)     # t1 points to (1, 2, 3)
t2 = t1            # t2 points to the same tuple as t1
t1 = (2, 3, 4)     # t1 points to a new tuple (2, 3, 4)

вы на самом деле создаете совершенно новый кортеж и назначаете t1, чтобы указать на этот новый кортеж. t2 все еще указывает на старый кортеж, который нельзя изменить, поскольку кортежи неизменяемы. Короче говоря, если вы назначаете неизменяемое значение переменной, вы можете предположить, что значение никогда не изменится - если вы явно не назначили новое значение переменной.

Но когда вы меняете значение списка, вы фактически меняете сам список:

l1 = [1, 2, 3]     # l1 points to [1, 2, 3] 
l2 = l1            # l2 points to the same list as l1
l1[0] = 5          # now [1, 2, 3] becomes [5, 2, 3]

Так как l1 и l2 оба указывают на один и тот же список, они изменяются, когда один из них изменяется.

Чтобы сделать копию, которая не изменится при изменении l1, просто используйте list:

l2 = list(l1)

Или используйте нотацию фрагмента:

l2 = l1[:]
  • 0
    Работает! Бесконечно благодарен :)
4

Помните, что эти имена в Python не являются ПЕРЕМЕННЫМИ, они относятся к переменным. Таким образом, вы получаете два псевдонима в один кусок магазина. Посмотрите на модуль копирования или используйте это:

 cpy = mystr[:]
  • 0
    Работает! Бесконечно благодарен :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню