چالش روزانه · ۲۲ مهر ۱۴۰۵

چالش پایتون ۱۲: رشته‌ها تغییرناپذیرند

قبل از اجرای کد، خروجی آن را پیش‌بینی کن. حدس نزن؛ خط به خط فکر کن پایتون چه می‌کند.

s = "hello"
t = s
s = "y" + s[1:]
print(s, t)
خروجی کدام است؟

نمایش پاسخ و توضیح

پاسخ درست: گزینهٔ ب — yello hello

خط به خط

  1. s = "hello" ← نام s به رشتهٔ "hello" وصل می‌شود.
  2. t = s ← نام t هم به همان رشته وصل می‌شود.
  3. s = "y" + s[1:] ← طرف راست یک رشتهٔ کاملاً جدید می‌سازد: "y" + "ello" = "yello". بعد فقط نام s به این رشتهٔ جدید وصل می‌شود.
قبل از خط ۳:            بعد از خط ۳:
s ──┐                   s ───▶ "yello"
    ├──▶ "hello"        t ───▶ "hello"
t ──┘

رشتهٔ "hello" اصلاً تغییر نکرد. رشته‌ها در پایتون تغییرناپذیر (immutable) هستند و هیچ عملیاتی نمی‌تواند خود یک رشته را عوض کند؛ فقط می‌شود رشتهٔ جدید ساخت.

جواب: yello hello

مقایسه با لیست

لیست‌ها تغییرپذیرند و آنجا داستان فرق می‌کند. چالش ۱ را ببینید!

حالا خودت اجرا کن و تغییرش بده

s = "hello"
t = s
s = "y" + s[1:]
print(s, t)