trong c/C++, bạn có các biến trong ngăn xếp khi bạn tạo một biến cục bộ bên trong một hàm.python tạo mọi thứ từ heap?
http://effbot.org/zone/call-by-object.htm
đối tượng CLU tồn tại độc lập với kích hoạt thủ tục. Không gian cho các đối tượng được phân bổ từ một khu vực lưu trữ năng động/.../ Trong lý thuyết, tất cả các đối tượng tiếp tục tồn tại mãi mãi. Trong thực tế, không gian được sử dụng bởi một đối tượng có thể được khai hoang khi đối tượng isno truy cập được lâu hơn vào bất kỳ chương trình CLU nào.
Điều này có nghĩa là các đối tượng trong python được tạo từ heap (như trong malloc trong c/C++)? và các đối tượng được deallocated khi không có tên liên kết với họ? (như con trỏ thông minh)?
Ví dụ:
def foo(a):
result = []
result.append(a)
return result
foo("hello")
myList = foo("bye")
Vì vậy, kết quả đầu tiên ([]) đã được tạo ra trong đống và đã deallocated vì không có tên gắn liền với nó?
bạn cũng có thể xóa mọi thứ theo cách thủ công bằng cách sử dụng 'del' như trong' del result' nếu bạn nghĩ rằng bạn cần. –
Nếu động lực của bạn để hỏi điều này là bạn muốn hàm của bạn luôn sử dụng cùng một danh sách, lưu ý rằng bạn có thể định nghĩa nó là 'def foo (a, result = [])' và cùng một danh sách sẽ được sử dụng mỗi khi bạn gọi hàm, khi nó được tạo khi hàm được xác định, không phải khi hàm được chạy. – geoffspear