Python – когда изменяется одна целочисленная переменная, сделайте вторую переменную равной

У меня есть два целых числа x и y , равные друг другу. Всякий раз, когда я изменяю x я хочу, чтобы изменение также отражалось в y . Как я могу это сделать с Python?

Я думаю, что это может быть достигнуто каким-то образом, указав обе переменные в «ячейку памяти», где хранится значение.

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

 In [16]: x = y = [0] In [17]: x Out[17]: [0] In [18]: y Out[18]: [0] In [19]: x[0] = 10 In [20]: y Out[20]: [10] In [21]: x Out[21]: [10] 

Инкапсулируйте как в функции, так и в … … чтение / запись контролируется через функцию, гарантируя тем самым поведение, которое вам требуется

Из кода Розетты :

Python не имеет указателей, и все имена Python (переменные) неявно ссылаются на объекты. Python – это позднесвязывающий динамический язык, в котором «переменные» являются нетипизированными привязками к объектам. (Таким образом, Pythonistas предпочитает термин «имя» вместо «variable», а термин «связывать» вместо «assign»).

Из того, что я могу заключить, при работе с целыми числами вы не можете указывать y на x и делать что-то до x и видеть, что изменения происходят и с y .

В лучшем случае вы можете изменить x и y одновременно, двумя способами:

  1. Несколько присвоений (привязок)

     >>> x = y = 9 >>> print (x, y) (9, 9) >>> x = 6 # won't change y >>> print (x, y) (6, 9) 
  2. Распаковка тюков

     >>> x, y = [9] * 2 >>> x, y = (9, ) * 2 # alternative >>> print (x, y) (9, 9) >>> x = 6 # y says "nice try, x" >>> print (x, y) (6, 9) 

Вы не можете.

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

 class MutableInt: def __init__(self, value=0): self._value = value def __add__(self, other): self._value += other def __repr__(self): return str(self._value) mutable_int = MutableInt(4) print(mutable_int) # 4 def addOne(mutable_int): mutable_int += 1 addOne(mutable_int) print(mutable_int) # 5 

Вы можете изменить x или y через функцию, попробуйте следующий код:

 def change_x(value): global y y = value return value def change_y(value): global x x = value return value x = y = 3 print(x,y) x = change_x(5) print(x,y) y = change_y(6) print(x,y)