Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Truyền tham chiếu vs truyền giá trị trong Python

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]