python 共享傳參

python 共享傳參

人們談到Python的傳參方式,常常會說:參數按值傳遞,但這裏的值是引用。在C語言中,按值傳遞指的是函數得到的是參數的副本;而按照引用傳遞指的是函數得到的是參數的指針。
在Python中,函數得到的是參數的副本,但參數使用是引用。如果參數引用的是可變對象,那麼對象可能會被修改,但是對象的標識不變。此外,因爲函數得到的是參 數引用的副本,所以重新綁定對函數外部沒有影響。
這樣說來,Python的傳參方式稱爲共享傳參更爲合適
基於這種特性,Python不推薦,在函數參數中使用可變對象作爲參數的默認值
Python Tutor,交互式網站,可以查看變量的引用動畫

class SB:
	"""
	這種寫法不太完善,最好判斷一下參數類型,否則會出現意想不到的驚喜
	"""
    def __init__(self, passengers=None):
        if passengers is None:
            self.passengers = []
        else:
            self.passengers = list(passengers)
            # 和下面這種形式等價
            # self.passengers = copy.deepcopy(passengers)
            
class SBB:

    def __init__(self, passengers=None):
        if passengers is None:
            self.passengers = []
        else:
            self.passengers = passengers

# 在控制檯中
ist = [1,2,3,4]
sb = SB(ist)
sbb = SBB(ist)
sb.passengers is ist 
# False
sbb.passengers is ist 
# True
ist.append(5)
ist
# [1, 2, 3, 4, 5]
sbb.passengers
# [1, 2, 3, 4, 5]
sb.passengers
# [1, 2, 3, 4]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章