2017-04-27

Java 腦袋學 Python 參照(Pass by Reference or value)

Value VS Reference

Python 對 immutable 資料型別的變數存的是「值 value」,像是 str 與 tuple。
tuple1 = (0, 1, 2, 3)
tuple2 = tuple1
tuple2 = tuple2 + (4,)
print(tuple1) # (0, 1, 2, 3)
print(tuple2) # (0, 1, 2, 3, 4)
修改 tuple2 並不會連動到 tuple1。

Python 對 mutable 資料型別的變數存的是「參照 reference」,像是 list 與 dict。
list1 = [0, 1, 2, 3]
list2 = list1
list2.remove(1)
print(list1) # [0, 2, 3]
print(list2) # [0, 2, 3]
list1 與 list2 參照到同一份資料。

function arguments

在函式參數的傳遞上,也是套用相同的規則,mutable 資料是 pass by reference,而 immutable 資料是 pass by value。
def hello(s, l):
    s += ' reviewed'
    l.remove(0)
    print(s) # Neil reviewed
    print(l) # [1, 2]

s = 'Neil'
l = [0, 1, 2]
print(s) # Neil
print(l) # [0, 1, 2]
hello(s, l)
print(s) # Neil
print(l) # [1, 2]
---
---
---

沒有留言:

張貼留言