Tất cả tham số (đối số) trong Python được truyền bằng tham chiếu (pass by reference). Nghĩa là nếu bạn thay đổi nội dung mà tham số trỏ đến bên trong hàm, thay đổi cũng phản ánh lại ở hàm gọi.
Ví dụ 1
#!/usr/bin/python
# Định nghĩa hàm
def changeme(mylist):
"This changes a passed list into this function"
mylist.append([1,2,3,4])
print "Values inside the function: ", mylist
return
# Gọi changeme
mylist = [10,20,30]
changeme(mylist)
print "Values outside the function: ", mylist
Kết quả
Ở đây, ta giữ tham chiếu đối tượng truyền vào và thêm giá trị vào cùng đối tượng. Kết quả:
Values inside the function: [10, 20, 30, [1, 2, 3, 4]] Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
Có ví dụ khác: đối số truyền bằng tham chiếu nhưng tham chiếu bị ghi đè bên trong hàm gọi.
Ví dụ 2
#!/usr/bin/python
# Định nghĩa hàm
def changeme(mylist):
"This changes a passed list into this function"
mylist = [1,2,3,4] # Gán tham chiếu mới cho mylist
print "Values inside the function: ", mylist
return
# Gọi changeme
mylist = [10,20,30]
changeme(mylist)
print "Values outside the function: ", mylist
Kết quả
Tham số mylist là local trong hàm changeme. Thay đổi mylist trong hàm không ảnh hưởng mylist bên ngoài. Hàm không làm gì cả và kết quả:
Values inside the function: [1, 2, 3, 4] Values outside the function: [10, 20, 30]