這個問題在這里已經有了答案: 修改函式內的串列 4 個答案 2天前關閉。
def test(nums):
nums = list(set(nums))
nums = [1,2,3,4,1,2,3,4]
test(nums)
print(nums)
[1,2,3,4,1,2,3,4]
我無法理解這個程序。如果我做類似的事情
def test(nums):
nums.append(7)
nums = [1,2,3,4,1,2,3,4]
test(nums)
print(nums)
[1,2,3,4,1,2,3,4,7]
串列改變。
uj5u.com熱心網友回復:
當您在任何函式中使用物件方法時,python 中的一切都是物件,然后 python 根據該方法更改該物件。append在您的情況下就位
在這種情況下,
def test(nums):
nums.append(7)
nums = [1,2,3,4,1,2,3,4]
test(nums)
print(nums)
nums是串列物件,并且您正在append就地呼叫該串列物件的方法,因此它正在更改原始串列。
雖然在這種情況下,
def test(nums):
nums = list(set(nums))
nums = [1,2,3,4,1,2,3,4]
test(nums)
print(nums)
您已將串列物件傳遞給您的函式,但nums = list(set(nums))在這一行中,您分配了一個新的串列物件,nums而先前nums的物件丟失了。
為澄清起見,您可以列印這些物件的 id,
def test(nums):
print(id(nums)) # this will be original list id
nums = list(set(nums))
print(id(nums)) # this will be changed
nums = [1,2,3,4,1,2,3,4]
print(id(nums)) # this will be original list id
test(nums)
print(id(nums)) # this will be original list id
print(nums)
對于其他情況,
def test(nums):
print(id(nums)) # this will be original list id
nums.append(7)
print(id(nums)) # this will be original list id
nums = [1,2,3,4,1,2,3,4]
print(id(nums)) # this will be original list id
test(nums)
print(id(nums)) # this will be original list id
print(nums)
如果你這樣做
def test(nums):
print(id(nums)) # this will be original list id
nums[:] = [1,2,3]
print(id(nums)) # this will be original list id
nums = [1,2,3,4,1,2,3,4]
print(id(nums)) # this will be original list id
test(nums)
print(id(nums)) # this will be original list id
print(nums)
在這種情況下,當您進行切片時,也會使用 then__getitem__和__setitem__dunder 方法,它們會就地更改串列物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528283.html
標籤:Python列表功能
上一篇:JS:一個函式和兩個Document.getElementById()結果相同在“未定義”
下一篇:有效三角形哈佛cs50練習題
