تفاوت تاپل و لیست
در واقع، در این درس تفاوت تاپل و لیست را از پایه و با مثال یاد میگیرید.
بنابراین تا اینجا هم لیست را کامل یاد گرفتید و هم تاپل را. وقتی دو چیز اینقدر شبیه هم باشند، سؤال طبیعی این است که چرا پایتون هر دو را دارد.
همچنین، جواب در یک کلمه خلاصه میشود: تغییرپذیری. هر تفاوت دیگری که در این درس میبینید، نتیجهی همین یک تفاوت است.
شباهتها
به این ترتیب، هر دو مجموعهای مرتب از عناصرند. یعنی ترتیب درشان معنا دارد و حفظ میشود. هر دو میتوانند عناصر تکراری داشته باشند و هر دو میتوانند همزمان عدد، رشته و هر نوع دادهی دیگری را در خود جا دهند.
علاوه بر این، هر دو با کروشه و ایندکس خوانده میشوند، هر دو برش میخورند، هر دو با for پیمایش میشوند و هر دو با in قابل جستجو هستند.
my_list = ["سیب", "موز"]
my_tuple = ("سیب", "موز")
print(my_list[0], my_tuple[0])
print(len(my_list), len(my_tuple))
print("موز" in my_list, "موز" in my_tuple)
سیب سیب
2 2
True True
تفاوت بنیادین
لیست تاپل
┌───────────────┐ ┌───────────────┐
│ سیب │ موز │ │ سیب │ موز │
└───────────────┘ └───────────────┘
▲ ▲
│ │
میتوان عوض کرد قفل است، عوض نمیشود
my_list[0] = "گیلاس" # مشکلی ندارد
my_tuple[0] = "گیلاس" # TypeError
جدول مقایسه
| تاپل | لیست | ویژگی |
| پرانتز | کروشه | علامت تعریف |
| خیر | بله | قابل تغییر |
| ۲ متد | حدود ۱۱ متد | تعداد متدها |
| کمتر | بیشتر | مصرف حافظه |
| کمی سریعتر | کمی کندتر | سرعت پیمایش |
| بله | خیر | کلید دیکشنری شدن |
تفاوتی که معمولاً گفته نمیشود
در نهایت، تاپل میتواند کلید دیکشنری باشد ولی لیست نمیتواند. دلیلش هم همان تغییرناپذیری است: چیزی که ممکن است وسط کار عوض شود، نمیتواند نشانی ثابت باشد.
locations = {(35, 51): "تهران", (32, 51): "اصفهان"}
print(locations[(35, 51)])
تهران
در واقع، اگر همین کار را با لیست امتحان کنید:
TypeError: unhashable type: 'list'
بالاخره کدام را انتخاب کنیم
در واقع، قاعدهای که خودم به کار میبرم: اگر قرار است مجموعه در طول برنامه رشد کند، کم شود یا تغییر کند، لیست. اگر مجموعه یک واحد بههمپیوسته است که نباید دستکاری شود، تاپل.
- فهرست کاربران یک سایت: لیست، چون کاربر اضافه و کم میشود.
- مختصات طول و عرض جغرافیایی: تاپل، چون یک نقطهی واحد است.
- روزهای هفته: تاپل، چون قرار نیست کسی روز جدیدی اضافه کند.
- سبد خرید: لیست، چون مدام در حال تغییر است.
یک مزیت دیگر هم دارد که تازهکارها معمولاً نادیده میگیرند: وقتی از تاپل استفاده میکنید، دارید به بقیهی تیم پیام میدهید که این داده قرار نیست تغییر کند. کد خوب، فقط کدی نیست که کار کند؛ کدی است که نیتش را هم منتقل کند.
اشتباهات رایج
تصور اینکه تاپل کاملاً قفل است
data = ([1, 2], "ثابت")
data[0].append(3)
print(data)
([1, 2, 3], 'ثابت')
تاپل تغییر نکرده؛ هنوز همان دو عنصر قبلی را دارد. ولی عنصر اولش خودش یک لیست است و لیست تغییرپذیر است. تاپل محتوای عناصرش را قفل نمیکند، فقط خودش را.
جمعبندی
لیست و تاپل در خواندن داده یکساناند و تنها در نوشتن فرق دارند. لیست برای دادهی در حال تغییر است و تاپل برای دادهی ثابت.
در درس بعدی سراغ دیکشنری میرویم؛ ساختاری که به جای شماره، با نام به داده دسترسی میدهد.
برای مطالعهی بیشتر میتوانید به مستندات رسمی پایتون سر بزنید.
این درس بخشی از دوره آموزش پایتون مقدماتی است.