Python 2.7 重置/回溯变量时出现问题

Python 2.7 重置/回溯变量时出现问题,python-2.7,wxpython,Python 2.7,Wxpython,我已经使用wxPython用Python编写了一个Cryptoquote生成器。我对wxPython本身没有任何问题,而是重置变量。我的程序是这样工作的:我有一个生成加密报价的按钮。然后,用户按下一个解码按钮,一次更改一个字母。有一个按钮用于重置整个报价,还有一个按钮用于重置每次后退一步的更改 我有一个base\u copy变量来存储原始的加密报价。它是一个空列表,在调用_generate _quote时,用加密报价的单个字符填充一个。它在整个循环中保持不变——因此我可以使用on_clear_a

我已经使用wxPython用Python编写了一个Cryptoquote生成器。我对wxPython本身没有任何问题,而是重置变量。我的程序是这样工作的:我有一个生成加密报价的按钮。然后,用户按下一个解码按钮,一次更改一个字母。有一个按钮用于重置整个报价,还有一个按钮用于重置每次后退一步的更改

我有一个
base\u copy
变量来存储原始的加密报价。它是一个空列表,在调用_generate _quote时,用加密报价的单个字符填充一个。它在整个循环中保持不变——因此我可以使用
on_clear_all
on_clear_last
调用它来重置加密的报价。问题是,如果我使用我的
decode\u按钮
解码一封信,然后使用我的
clear\u all\u按钮
,然后再次使用
decode\u按钮
,我的
clear\u all\u按钮
调用一个
基本副本
,该副本现在以某种方式被更改的字母污染,而这些字母只应该在我的
split cryptoquote>副本中。为什么会这样,因为我从不隐式调用alter
base\u copy
?(但是,我确实在清除所有
上调用
,将
拆分加密引号
设置为
基本复制
,但这不应改变
基本复制

(不过,我确实会打电话给所有人,以设置拆分密码。) 以创建基本副本,但这不应更改基本副本。)

您已经发现了自己的问题:

MainWindow.split\u cryptoquote=MainWindow.base\u copy
MainWindow.split\u cryptoquote
绑定到与
MainWindow.base\u copy
相同的对象,因此当您修改一个对象时,您就修改了另一个对象

如果你把线路改成

MainWindow.split\u cryptoquote=MainWindow.base\u copy[:]

您将强制python创建一个新对象(一个
MainWindow.base\u copy
)的副本,而这个问题不应该发生

编辑:下一行:
MainWindow.split\u buffer=MainWindow.base\u copy
我认为也需要同样的处理

请参见此示例:

>>> lista = [1,2]
>>> listb = lista
>>> listb.append(3)
>>> lista
[1, 2, 3]
>>> listb
[1, 2, 3]

>>> listc = lista[:]
>>> listc.append(4)
>>> listc
[1, 2, 3, 4]
>>> lista
[1, 2, 3]
>>> lista = [1,2]
>>> listb = lista
>>> listb.append(3)
>>> lista
[1, 2, 3]
>>> listb
[1, 2, 3]

>>> listc = lista[:]
>>> listc.append(4)
>>> listc
[1, 2, 3, 4]
>>> lista
[1, 2, 3]