Karışıklığı azaltmak için değişkenleri yeniden adlandıracağım. n -> nf veya nmain . x -> xf veya xmain :
def f(nf, xf):
nf = 2
xf.append(4)
print 'In f():', nf, xf
def main():
nmain = 1
xmain = [0,1,2,3]
print 'Before:', nmain, xmain
f(nmain, xmain)
print 'After: ', nmain, xmain
main()
Eğer fonksiyon çağırdığınızda f , Python çalışma zamanı bir kopyasını oluşturur xmain ve atar onu xf ve benzer bir kopyasını atar nmain için nf .
N durumunda , kopyalanan değer 1'dir.
X durumunda kopyalanan değer değişmez liste değildir [0, 1, 2, 3] . Bu listeye bir göndermedir . xf ve xmain böylece değiştirdiğinizde, aynı listede baktığından xf da değiştirdiğiniz xmain .
Ancak, şöyle bir şey yazacak olsaydınız:
xf = ["foo", "bar"]
xf.append(4)
Bunu bulur xmain değişmedi. Bunun nedeni, xf = ["foo", "bar"] satırında yeni bir listeyi göstermek için xf'yi değiştirmiş olmanızdır . Bu yeni listede yaptığınız değişikliklerin xmain'in hala işaret ettiği listede hiçbir etkisi olmayacaktır .
Umarım yardımcı olur. :-)