Во всех учебниках по python пишут, что знак равенства "=" в Python лишь создает ссылку одной переменной на другую и при изменении одной из них мы тем самым поменяем другую. Для копирования значения переменной следует использовать метод copy, но у меня все нормально работает и со знаком равенства (=), пример ниже:
var1 = "Переменная"
print (id (var1))
var2 = var1
print (id (var2))
var2 = "Новая переменная"
print (id (var1))
print (id (var2))
print (var1)
Результат:
1989391115728
1989391115728
1989391115728
1989391081744
Переменная
В итоге переменная var2 действительно имеет тот же идентификатор, что и var1, но лишь до того момента, пока я не поменяю ее значение. Что я делаю не так?
Все верно, т.к. в данном случае мы присваиваем значение новой переменной.
Если попробовать сделать так:
var1 = [1, 2]
print (id (var1))
var2 = var1
print (id (var2))
var1.append(4)
print (id (var1))
print (id (var2))
print (var2)
Мы увидим:
2222837998088
2222837998088
2222837998088
2222837998088
[1, 2, 4]
Т.е. не изменяя значение var2 метдом append к var1 мы все-таки изменили ее.
При использования метода copy все проходит должным образом:
import copy
var1 = [1, 2]
print (id (var1))
var2 = copy.copy(var1)
print (id (var2))
var1.append(4)
print (id (var1))
print (id (var2))
print (var2)
Результат:
2222837957064
2222838953032
2222837957064
2222838953032
[1, 2]