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