Saya akan mengganti nama variabel untuk mengurangi kebingungan. n -> nf atau nmain . x -> xf atau 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()
Ketika Anda memanggil fungsi f , runtime Python membuat salinan xmain dan menetapkannya ke xf , dan juga menetapkan salinan nmain ke nf .
Dalam hal n , nilai yang disalin adalah 1.
Dalam kasus x nilai yang disalin bukanlah daftar literal [0, 1, 2, 3] . Ini adalah referensi ke daftar itu. xf dan xmain menunjuk pada daftar yang sama, jadi ketika Anda memodifikasi xf, Anda juga memodifikasi xmain .
Namun, jika Anda menulis sesuatu seperti:
xf = ["foo", "bar"]
xf.append(4)
Anda akan menemukan bahwa xmain belum berubah. Ini karena, pada baris xf = ["foo", "bar"] Anda harus mengubah xf untuk menunjuk ke daftar baru . Setiap perubahan yang Anda lakukan pada daftar baru ini tidak akan berpengaruh pada daftar yang tetap ada masih poin ke.
Semoga itu bisa membantu. :-)