Python 为什么要把它放在名单上? def测试(x,列表): 附加列表(x) 如果x

Python 为什么要把它放在名单上? def测试(x,列表): 附加列表(x) 如果x,python,Python,为什么结果是[1,2]?而不仅仅是[1] 因为在递归调用test()返回后执行print语句 Python对象始终是通过引用传递的,因此当第二次调用test调用list.append(x)时,它会附加到传入的原始列表中,然后打印该列表。def test(x,theList): def test(x,theList): theList.append(x) if x < 2: x = x + 1 test(x,theList)

为什么结果是[1,2]?而不仅仅是[1]

因为在递归调用
test()
返回后执行
print
语句

Python对象始终是通过引用传递的,因此当第二次调用test调用list.append(x)时,它会附加到传入的原始列表中,然后打印该列表。

def test(x,theList):
def test(x,theList): 
    theList.append(x) 
    if x < 2: 
        x = x + 1 
        test(x,theList) 
        print x 
        print theList 

test(1,[]) 
如果x<2: 附加列表(x) x=x+1 测试(x,列表) 打印x 打印列表 测试(1,[])
是的,但这是一个测试,实际情况不同。我想知道为什么它更改列表而不让我返回来更改列表?@BBAA我不明白你的意思。我删除了我的答案,因为在重新阅读代码时,我不再确定你在问什么。函数不返回任何内容,并且您传入的列表在返回后无法访问。那么,你说“结果”是什么意思?我不明白当他再深入一步时,他会改变名单。但因为我没有返回它或其他东西,为什么它会打印[1,2]?啊,好吧,我明白了,有没有办法让它不编辑原始列表?@BBAA:你可以调用
test(x,theList[:])
,它会传递列表的副本而不是原始列表。然而,这是危险的;在不了解您正在处理的实际问题的情况下,很难想象在什么情况下需要如此低效的代码。谢谢Marcelo Cantos,您提供了我继续操作所需的所有信息
def test(x,theList): 
    if x < 2: 
        theList.append(x) 
        x = x + 1 
        test(x,theList) 
        print x 
        print theList 

test(1,[])