Chuyển nhượng bằng Python không sửa đổi một đối tượng tại chỗ. Nó đặt lại tên để sau input = new_val
, biến cục bộ input
nhận giá trị mới.
Nếu bạn muốn thay đổi "bên ngoài" input
, bạn sẽ phải quấn nó bên trong một đối tượng có thể thay đổi như danh sách một phần tử:
def foo(input, new_val):
input[0] = new_val
foo([input])
Python không làm pass-by-reference chính xác cách thức tham chiếu C++ truyền đi. Trong trường hợp này ít nhất, nó nhiều hơn, nếu như tất cả các đối số là một con trỏ trong C/C++:
// effectively a no-op!
void foo(object *input, object *new_val)
{
input = new_val;
}
Nguồn
2011-11-18 14:51:22
Bạn có thể gây nhầm lẫn cho chính mình bằng cách gọi biến cục bộ là "đầu vào" trong định nghĩa hàm foo. Ngoài ra, những gì Sven nói trong câu trả lời. – phkahler
Bất cứ nơi nào bạn đọc rằng Python chuyển mọi thứ bằng tham chiếu, chúng đều sai. –