函式參數為物件
將物件傳入函式,可以修改物件的成員變數。
在0x1000記憶體位址,建立Person物件,p1變數指到0x1000。

1.在Stack建立change()函式空間。
2.參數傳來的p1記憶體位址0x1000,複製給person區域變數。

person的記憶體位址是0x1000,修改0x1000記憶體位址的name與age 屬性。

離開change函式,change函式空間的person區域變數,記憶體位址被釋放。

完整程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Person:
name = None
age = None
def __init__(self, name, age):
self.name = name
self.age = age
def change(person):
person.name = "Mary"
person.age = 10
p1 = Person("Bill", 20)
print(f"p1 name = {p1.name}, age = {p1.age}")
change(p1)
print(f"p1 name = {p1.name}, age = {p1.age}")
p1 name = Bill, age = 20
p1 name = Mary, age = 10
函式參數指向None
將物件傳入函式,並把它的記憶體位址變成None,不會影嚮外部的物件。
在0x1000記憶體位址,建立Person物件,p1變數指到0x1000。

1.在Stack建立change()函式空間。
2.參數傳來的p1記憶體位址0x1000,複製給person區域變數。

將person區域變數指派為None。

離開change函式,change函式空間的person區域變數,記憶體位址被釋放。

由以下執行結果可以發現,p1指向的物件沒有變成None。
完整程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person:
name = None
age = None
def __init__(self, name, age):
self.name = name
self.age = age
def change(person):
# person 指向 None
person = None
p1 = Person("Bill", 20)
print(f"p1 name = {p1.name}, age = {p1.age}")
change(p1)
print(f"p1 name = {p1.name}, age = {p1.age}")
p1 name = Bill, age = 20
p1 name = Bill, age = 20