Tôi có câu hỏi về phạm vi trong hàm python. Tôi đã đưa vào một ví dụ minh họa vấn đề tôi đang gặp phải.Phạm vi chức năng Python
fun0 xác định lại mục nhập đầu tiên trong danh sách có thể thay đổi c. Thay đổi này được phản ánh bên ngoài fun0, ngay cả khi tôi không trả lại bất kỳ giá trị nào từ fun0.
fun1 định nghĩa lại biến c hoàn toàn, nhưng sự thay đổi là không được phản ánh bên ngoài của fun1. Tương tự, fun2 xác định lại c và thay đổi không được phản ánh bên ngoài fun2.
Câu hỏi của tôi là, tại sao không fun0 sửa đổi val3 trong chính chức năng, trong khi fun1 và fun2 không sửa đổi val4 và val7, tương ứng?
def fun0(a, b, c):
c[0] = a[0] + b[0]
return
def fun1(a, b, c):
c = a[0] + b[0]
return
def fun2(a, b, c):
c = a + b
return
def main():
val1 = ['one']
val2 = ['two']
val3 = ['']
fun0(val1, val2, val3)
print val3
val4 = []
fun1(val1, val2, val4)
print val4
val5 = 1
val6 = 1
val7 = 0
fun2(val5, val6, val7)
print val7
return
if __name__=='__main__':
main()
Danh sách có thể thay đổi, bạn có thể sửa đổi các yếu tố của chúng và ảnh hưởng đến tất cả mọi người có tham chiếu. Khi bạn gán lại nó, bạn đang tạo một tham chiếu mới. – byxor
Thật kỳ lạ khi tôi tham khảo các đoạn mã khác như "mọi người". Có lẽ mã nhân bản là cách hiểu của tôi tốt hơn. – byxor