آیا String ها در پایتون همیشه immutable هستند؟

امروز ی مقاله داشتم میخوندم باور نمیکردم چنین چیزی صحت داشته باشه

تا این که خودم امتحان کردم!

s = ""
last_id = id(s)
counter = 0

for i in range(1, 1000):
    s += 'a'

    if id(s) != last_id:
        print ( i )
        last_id = id(s)
        counter += 1


print ( counter )

اخرین چیزی که توی کنسول میبینم عدد ۴۷ هست

1
2
16
32
48
64
80
96
112
128
144
160
176
192
208
224
240
256
272
288
304
320
336
352
368
384
400
416
432
448
464
488
504
536
584
616
648
680
712
744
776
824
856
888
920
952
984
47

این پست بیشتر مثل سپم میمونه.
در ضمن هیچ اتفاق عجیبی من نمیبینم و string literal شما mutate نشده، فقط در هر دوره یک آبجکت جدید بوجود آمده. به این نمیگن mutation، این reassignment هست مثل:

s = "a"
s = s + "b"
1 Likes

@hamidb14 جان تیتر این مطلب درست نیست و ممکنه باعث گمراهی دیگران بشه.

صد بار از روی جمله زیر بنویس :grin:
String ها در پایتون immutable هستند.

نمیتونم تاپیک رو حذف کنم

چرا حذف؟ درستش کردم

1 Likes