我正在做家庭作业,但我遇到了一个我不太了解的python怪异问题。我根据一些输入数字创建一个算盘,为此,我创建了一个基本算盘或一个“空”算盘,将0表示为全局变量。在我的函数中,将new_abacus值设置为等于empty_abacus全局变量;但是由于某些原因,当我更改new_abacus变量时,empty_abacus变量也会更改。
在我的功能内:
def function(input_num):
global empty_abacus
new_abacus = empty_abacus
#I then change the new_abacus variable
return new_abacus
当我尝试使用此功能后打印出empty_abacus时,它已被更改。我认为这是在python中使用全局变量有些奇怪的事情。更改new_abacus时如何防止empty_abacus更改。换句话说,如何为new_abacus分配empty_abacus的值;而不是参考。
注意:empty_abacus是一个二维列表
编辑:如果标题令人误解,我深表歉意,我不确定如何用文字表达。
答案 0 :(得分:1)
这里问题的症结是new_abacus = empty_abacus
,它没有按照您的想法执行。 empty_abacus
通过引用传递,这意味着new_abacus
和empty_abacus
都将指向内存中的相同位置。更改二者之一将影响内存中的相同空间。
相反,empty_abacus
中new_abacus
中的make a copy:
import copy
# ... other code here ...
new_abacus = copy.deepcopy(empty_abacus)
答案 1 :(得分:0)
new_abacus = empty_abacus
此行不会复制变量,而是将其引用为同一变量。
您需要根据数据类型创建另一个变量副本: 像这样的一些使它更加清晰: Copied variable changes the original?
如评论中所述: new_abacus = copy.deepcopy(empty_abacus)
这将创建另一个副本,因此您不会引用内存中的同一对象