[英]Python: confused about assignment in nested lists
我將多項式放在嵌套列表中。 例如5X^3+4X^2+8X
。 我將系數(5,4,8)存儲在第一個列表中,將指數(3,2,1)存儲在第二個列表中:
polynom = [[5,4,8],[3,2,0]]
然后我定義一個函數來彈出像這樣的系數和指數的最后一項
def expon_coef_pop(seq):
expon = seq[1]
coef = seq[0]
expon.pop()
coef.pop()
return coef, expon
print(expon_coef_pop(polynom))
print(polynom)
# polynom changed into [[5,4],[4,2]]
令人驚訝的是,我發現polynom
的值變成了[[5,4],[3,2]]
。 我以為我只是修改了expon
和coef
值。
我不想更改多項式的值。
這怎么可能發生,以及如何處理這個問題? 我對為什么polynorm
不更改功能感到困惑。 (我只是為一個簡單的示例編寫了該函數。)
coef
和expon
都是引用,分別指向與seq[0]
和seq[1]
相同的列表對象。 您需要先復制列表,然后再將其從列表中彈出,這也可以一步一步完成:
def expon_coef_pop(seq):
return seq[0][:-1], seq[1][:-1]
這是因為您通過引用傳遞了列表。 通過復制與此作業進行比較
expon = list(seq[1])
coef = list(seq[0])
只需更改簡單的修改即可。 你可以試試:
你需要改變
expon = seq[1] to expon = seq[1][:]
coef = seq[0] to coef = seq[0][:]
您的最終代碼:
polynom = [[5,4,8],[3,2,0]]
def expon_coef_pop(seq):
expon = seq[1][:]
coef = seq[0][:]
expon.pop()
coef.pop()
return coef, expon
print(expon_coef_pop(polynom))
print(polynom)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.