เหตุใดจึงมีการจัดสรรสตริง Python ในสแต็ก


9

ตามVisualizer รหัส Python นี้สตริง Python ได้รับการจัดสรรในสแต็กและไม่ได้อยู่ในกอง

ทำไมนี้ ฉันคิดว่าพวกเขาจะคล้ายกับ Java ที่มีการจัดสรร Strings บนกอง

คำตอบ:


7

Visualizer นั้นไม่แสดงข้อมูลสตริงบนสแต็ก มันแสดงให้เห็นถึงการอ้างอิงในท้องถิ่นไปยังข้อมูลกองเป็นส่วนหนึ่งของสแต็คโทร นี่คล้ายกับ Java ที่Stringการอ้างอิงเป็นตัวแปรโลคัลที่ชี้ไปยังStringวัตถุจริงบนฮีป

Visualizer มีอิสระที่จะทำให้การเป็นตัวแทนในลักษณะใด ๆ นั้นง่ายขึ้น มันไม่ได้หมายความว่า "สตริง Python ถูกจัดสรรบนสแต็ก" ในการนำไปใช้ของ Python


1

เกร็กพูดในคำตอบของเขาแล้วมีการจัดสรรสตริงไว้บนกอง

Visualizer ได้เลือกที่จะแสดงวัตถุบางอย่างในส่วน "กรอบ" ซึ่งดูเหมือนว่าฉันผิด โชคดีที่มันมีผลกระทบเพียงเล็กน้อยสำหรับบางคนที่เรียนรู้ python เนื่องจากวัตถุที่ได้รับผลกระทบ (int, string) นั้นไม่เปลี่ยนรูป ดังนั้นการให้เหตุผลเกี่ยวกับผลกระทบจึงยังคงเป็นไปได้

อย่างไรก็ตามมันให้การแสดงผลที่ผิดพลาดว่าสตริงนั้นซ้ำกันในหน่วยความจำเมื่อคุณทำสิ่งต่าง ๆ เช่น:

x = "hello"
y = x
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.