[問題] def函式之輸入變數會隨函式內容改變
各位前輩好
小弟有一個新手級問題
先上程式碼
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所致?
若不是的話,還盼望版友們能指導小弟造成此現象的原因為何
先謝謝版友撥空閱讀我的疑問
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.22.64.145 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1594864528.A.97D.html
→
07/16 09:59,
5年前
, 1F
07/16 09:59, 1F
推
07/16 10:16,
5年前
, 2F
07/16 10:16, 2F
先謝謝版友們的回答,剛剛也google後才大致了解
pass by reference跟pass by value之別
所以看起來python是根據不同情況去pass value或reference囉?
那解決之道就是在函式內又在設一個變數嗎?
以上例來說,應修正為
def xxx(d):
y=d
y[0]=123
return y
※ 編輯: jasonhsu14 (211.22.64.145 臺灣), 07/16/2020 10:23:52
※ 編輯: jasonhsu14 (211.22.64.145 臺灣), 07/16/2020 10:26:31
推
07/16 10:52,
5年前
, 3F
07/16 10:52, 3F
→
07/16 10:52,
5年前
, 4F
07/16 10:52, 4F
→
07/16 10:53,
5年前
, 5F
07/16 10:53, 5F
推
07/16 10:55,
5年前
, 6F
07/16 10:55, 6F
→
07/18 01:27,
5年前
, 7F
07/18 01:27, 7F
Python 近期熱門文章
PTT數位生活區 即時熱門文章