[问题] def函式之输入变量会随函式内容改变

楼主: jasonhsu14 (小健人)   2020-07-16 09:55:26
各位前辈好
小弟有一个新手级问题
先上程式码
def xxx(d):
d[0]=123
return d
a=[1,2]
b=xxx(a)
在程式码中,我设定变量a为[1,2]
但将a丢到def中,得到b的同时,a也会随之改变
想请问造成这个现象的原因
是否为 a是一个全域变量,而在函式中的d是a的shallow copy所致?
若不是的话,还盼望版友们能指导小弟造成此现象的原因为何
先谢谢版友拨空阅读我的疑问
作者: IAMPF (PF)   2020-07-16 09:59:00
因为你是送了reference过去
作者: TitanEric (泰坦)   2020-07-16 10:16:00
python是call by object list相当于传reference
作者: s0914714 (YA)   2020-07-16 10:52:00
要改成y=d[:] 一般来说要传list会写成 def xxx(d=None):
作者: kenduest (小州)   2020-07-16 10:52:00
用 y=d[:] 复制一份,或是你要用 y=copy.copy(d)
作者: s0914714 (YA)   2020-07-16 10:53:00
函式里面判断if not d成立 d = []
作者: bugbug777 (sil)   2020-07-16 10:55:00
shalow/deep copy, reference
作者: as30385438 (LCT)   2020-07-18 01:27:00
python中alway是pass by pointer,不会有不同情况

Links booklink

Contact Us: admin [ a t ] ucptt.com