如果我已經在 中附加了一些內容lista_input,則每當在generabinario()方法內部修改引數 arr (例如:arr[I] = 0/1)時,lista_input 中的所有值也會以完全相同的方式進行修改。
到底是怎么回事?
這是我對給定程式的輸出:
[[1, 1], [1, 1], [1, 1], [1, 1]]
當然,輸出是 [1, 1] 的序列,因為這是該方法對 arr 引數所做的最后修改。
這就是代碼:
lista_input = []
def generabinario(n, arr, i):
if i == n:
lista_input.append(arr)
return
arr[i] = 0
generabinario(n, arr, i 1)
arr[i] = 1
generabinario(n, arr, i 1)
if __name__ == "__main__":
weights = []
results = []
print("Inserisci il numero di pesi da inserire")
num = int(input())
print("Inserisci i pesi")
for i in range(0, num):
weights.append(int(input()))
inputs = [None] * num
generabinario(2, inputs, 0)
print(lista_input)
uj5u.com熱心網友回復:
嘗試:
lista_input = []
def generabinario(n, arr, i):
if i == n:
lista_input.append(arr[:]) # notice the arr[:]
return
arr[i] = 0
generabinario(n, arr, i 1)
arr[i] = 1
generabinario(n, arr, i 1)
if __name__ == "__main__":
weights = []
results = []
print("Inserisci il numero di pesi da inserire")
num = int(input())
print("Inserisci i pesi")
for i in range(0, num):
weights.append(int(input()))
inputs = [None] * num
generabinario(2, inputs, 0)
print(lista_input)
在arr[:]創建一個完全新的陣列,而不是具有相同的參考“不同”的陣列。僅arr使用 ,每次呼叫都使用相同的陣列,因為它們都具有相同的參考(即記憶體中的相同位置)。通過修改一個陣列,您就是在修改這個陣地,因此也修改了指向這個陣地的所有陣列。
在另一個問題上看到這個答案,看看什么是價值和參考以及與之相關的行為:https : //stackoverflow.com/a/986145/5446749
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311508.html
