Tại sao các chuỗi Python được phân bổ trên ngăn xếp?


9

Theo trình hiển thị mã Python này , các chuỗi Python được phân bổ trên ngăn xếp chứ không phải trên heap.

Tại sao lại thế này? Tôi nghĩ rằng chúng sẽ tương tự như Java nơi Chuỗi được phân bổ trên heap.

Câu trả lời:


7

Trình hiển thị đó không hiển thị dữ liệu chuỗi trên ngăn xếp. Nó đang hiển thị các tham chiếu cục bộ đến dữ liệu heap như một phần của ngăn xếp cuộc gọi. Điều này rất giống với Java khi các Stringtham chiếu là các biến cục bộ trỏ đến Stringcác đối tượng thực tế trên heap.

Trình hiển thị là miễn phí để thực hiện bất kỳ loại đơn giản hóa đại diện nào mà nó quan tâm. Nó không ngụ ý rằng "Chuỗi Python được phân bổ trên ngăn xếp" trong bất kỳ triển khai Python nào.


1

Có phải Greg đã nói trong câu trả lời của mình, các chuỗi được phân bổ trên đống.

Trình hiển thị đã chọn để hiển thị một số đối tượng trong phần "khung", điều này có vẻ sai đối với tôi. May mắn thay, nó có ít tác động đối với người học python, vì các đối tượng bị ảnh hưởng (int, chuỗi) là bất biến. Vì vậy, lý luận về hiệu ứng vẫn có thể.

Tuy nhiên, nó mang lại ấn tượng sai lầm rằng các chuỗi được nhân đôi trong bộ nhớ khi bạn thực hiện những việc như:

x = "hello"
y = x
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.