【问题标题】:temp array overwriting original array in loop临时数组在循环中覆盖原始数组
【发布时间】:2016-03-10 18:21:36
【问题描述】:

我有一个临时数组,这样原始数组就不会在每个循环中被覆盖。我知道这不是它实际上在做什么,但我没有其他解释......

e = .95
f = .95
g = .95
h = .95

for a in range(0,10):
    e = e + .01
    for b in range(0,10):
        f = f + .01
        for c in range(0,10):
            g = g + .01
            for d in range(0,10):
                h = h + .01
                adj = []
                temp2 = original
                for x in temp2:
                    print x
                    x[0] = x[0] * e
                    x[4] = x[4] * e
                    x[1] = x[1] * f
                    x[5] = x[5] * f
                    x[2] = x[2] * g
                    x[6] = x[6] * g
                    x[3] = x[3] * h
                    x[7] = x[7] * h
                    x[8] = x[8] * e
                    x[12] = x[12] * e
                    x[9] = x[9] * f
                    x[13] = x[13] * f
                    x[10] = x[10] * g
                    x[14] = x[14] * g
                    x[11] = x[11] * h
                    x[15] = x[15] * h
                    adj.append(sum(x))

当我打印 x 时,它正在增加,就好像它不是临时变量一样。

【问题讨论】:

    标签: python loops temporary


    【解决方案1】:

    temp2 不是一个单独的数组,它是对同一个数组的引用。您可能希望将x 复制到temp2。一种方法是使用以下代码行:

    import copy
    temp2 = copy.deepcopy(original)
    

    假设这是您遇到的问题。根据您的描述和代码,尚不清楚究竟是什么行为不符合预期。

    【讨论】:

      【解决方案2】:

      临时数组不是单独的数组。 我喜欢通过先将临时数组创建为空数组,然后将原始数组的内容添加到其中来解决此问题。

      这可以这样完成:

      original = ["apple", "banana", "orange"]   
      tempArray = []
      tempArray += original
      

      现在“tempArray”将具有原始数组的内容,但不会覆盖“原始”。

      【讨论】:

      • 这是一种非常粗略的创建副本的方法(已接受的答案是这样)
      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多