2016-11-16 74 views
0

即使運行for循環,列表中的變量'operations'也在更改,儘管它們沒有明確指出其值要更改的行。這裏是我的代碼:雖然沒有明確的變化,但列表變量的值仍在變化

validOperations = ['(', ')', '^', '*', '/', '+', '-'] 
operations = ['+', '*', '/'] 
newOp = operations 

for y in range(len(newOp) - 1): 
     for z in range(len(newOp) - 1): 
       if(validOperations.index(newOp[z]) > validOperations.index(newOp[z+1])): 
         oldVal = newOp[z] 
         newOp[z] = newOp[z+1] 
         newOp[z+1] = newOp[z] 
         print(newOp) 
         print(operations) 

我能做些什麼,以使其到業務的價值保持不變?

+4

'newOp = operations'不會複製。請參閱http://nedbatchelder.com/text/names.html – user2357112

回答

2

newOP不是operatoions的副本。 newOpoperations的別名。這意味着當newOP更改時,operations也會更改。你需要告訴Python中明確地複製你的列表:

newOp = operations[:]

如果您的列表是不止一個層次深嵌套然而,使用切片表示法將失敗。您必須改用copy.deepcopy

+0

注意:這種情況適用,但對於更復雜的結構,您需要使用['deepcopy'](https://docs.python.org/2 /library/copy.html) – TemporalWolf

+1

@TemporalWolf是的。我會告訴你的。謝謝 –

+0

感謝您的迴應,我一直在與此工作了幾天,沒有找到答案讓我瘋狂。 –