[英]Copy a variable in python (jupyter) / Use different functions with same variables
我用python編寫了一個小型Programm,但是它沒有按預期工作。
這是代碼:
puzzle = [8, 7, 5, 4, 1, 2, 3, 0, 6]
def count(p):
p[0] += 1
return p
def main(p):
print(p)
l = count(p)
print(l)
print(p)
b1 = main(puzzle)
我希望print(p)與print(l)不同,但是兩者的結果相同,這是print(l)應該具有的結果。 但是p也做了更改,但是我需要將其保持不變……這是一種特殊的python行為嗎? 有什么我想念的嗎? 我也嘗試更改函數中的變量名,但這沒有幫助。 我重新啟動了編譯器,但這也無濟於事。
有沒有解決方案來存儲函數輸出,然后再次調用函數而不讓函數更改給定參數? 這樣,l將成為計算后的結果,而p將保持在該值之前?
親切的問候,Joh。
您正在傳遞一個List參數。 參數傳遞是按對象調用。 由於列表在這種情況下是可變對象,因此類似於通過引用傳遞,並且對列表對象的更改將繼續存在。 如果您傳遞的是不可變值(例如Integer或String),則類似於通過復制/值傳遞,並且更改不會持久。 例如:
def s2asdf(s):
s = "asdf"
s = "hello world"
s2asdf(s)
print s
... 結果是:
$ python example.py
hello world
這樣做的原因是因為Python通過引用傳遞了函數參數。 當您調用count
函數時,它允許該函數修改函數內部的列表,並且更改將應用於原始對象。
如果要讓函數不修改列表而是返回其他列表,則必須通過將副本傳遞給函數或在函數內部進行復制來復制列表。 有很多方法可以在Python中復制列表,但是我喜歡使用list()
函數來實現。
這應該可以解決您的問題:
puzzle = [8, 7, 5, 4, 1, 2, 3, 0, 6]
def count(p):
new_list = list(p) # copy values of p to new_list
new_list[0] += 1
return new_list
def main(p):
print(p)
l = count(p)
print(l) # l is the new_list returned from count
print(p) # p stays the original value
b1 = main(puzzle)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.