這裏是我的功能的簡化版本,比較三組數字,發現兩組具有最高相關:爲什麼我的Python for循環remove()改變在循環之前聲明的變量?
inputs = ['vars_one', 'vars_two', 'vars_three']
def MostCorrelatedInputs(inputs):
correlation = 0
saved_inputs = inputs
for i in inputs:
testlist = saved_inputs
testlist.remove(i)
new_correlation = FindCorrelation(testlist)
if new_correlation > correlation:
correlation = new_correlation
outputs = testlist
return outputs
的問題是,當我運行的功能,似乎remove()
功能改變saved_inputs變量,即使我在inputs
上調用它。這是垃圾收集的問題嗎?爲什麼save_inputs變量被我的for循環修改,如果remove()
有望改變這個變量,是否有更好的方法來實現我的目標?
哇 - 顯然是學習Python如何工作,謝謝! – YPCrumble
@YPCrumble不客氣,這是一個非常常見的錯誤。這裏看起來像一個很好的閱讀:http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/ – Dunno