【问题标题】:Values for a list variable is changing despite there being no explicit changes [duplicate]尽管没有显式更改,但列表变量的值正在更改 [重复]
【发布时间】:2016-11-16 20:16:01
【问题描述】:

作为列表的变量“操作”在 for 循环运行后正在发生变化,尽管它们没有明确说明其值发生变化的行。这是我的代码:

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)

我该怎么做才能使操作的价值保持不变?

【问题讨论】:

标签: python arrays list for-loop


【解决方案1】:

newOP 不是operatoions 的副本。 newOpoperations 的别名。这意味着当newOP 发生变化时,operations 也会发生变化。您需要明确告诉 Python 复制您的列表:

newOp = operations[:]

但是,如果您的列表嵌套深度超过一层,则使用切片表示法将失败。您必须改用copy.deepcopy

【讨论】:

  • 注意:这种情况下有效,但是对于更复杂的结构,需要使用deepcopy
  • @TemporalWolf 是的。我会提到那个。谢谢
  • 感谢您的回复,我已经为此工作了几天,但没有找到答案让我发疯。
猜你喜欢
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2021-09-11
  • 2021-02-05
  • 1970-01-01
  • 2013-04-01
  • 2018-04-16
  • 2023-03-21
相关资源
最近更新 更多