تفاوت لیست (List) و تاپل (Tuple) در پایتون چیست؟
در مسیر یادگیری زبان پایتون، تسلط بر ساختمانهای داده (Data Structures) یکی از مهمترین قدمها برای نوشتن کدهای بهینه و اصولی است. دو مورد از پرکاربردترین ساختارهای ذخیرهسازی داده در این زبان، لیستها (Lists) و تاپلها (Tuples) هستند.
در نگاه اول، این دو بسیار شبیه به هم به نظر میرسند؛ هر دو از نوع دنباله (Sequence) هستند، ایندکسگذاری میشوند و میتوانند مجموعهای از دادهها با تایپهای مختلف (رشته، عدد، بولین و…) را در خود جای دهند. اما یک تفاوت بنیادین، مسیر استفاده از آنها را کاملاً جدا میکند. در این مقاله از بخش «ساختمان دادهها» در پای شو، به بررسی دقیق تفاوتهای لیست و تاپل میپردازیم.
لیست (List) چیست؟
لیست در پایتون یک مجموعه مرتب از دادههاست که مهمترین ویژگی آن تغییرپذیری (Mutable) بودن است. این یعنی پس از ساخت یک لیست، شما آزادی عمل کاملی برای اضافه کردن، حذف کردن و یا تغییر دادن مقادیر درون آن دارید. لیستها با استفاده از براکت [] تعریف میشوند.
مثال از تعریف و تغییر لیست:
my_list = [10, 20, 30, "PySho"]
print(my_list)
# تغییر یکی از اعضا
my_list[0] = 99
print(my_list) # خروجی: [99, 20, 30, 'PySho']
# اضافه کردن عضو جدید
my_list.append(50)
تاپل (Tuple) چیست؟
تاپل نیز مانند لیست یک مجموعه مرتب از دادههاست، اما با یک تفاوت بزرگ: تاپلها تغییرناپذیر (Immutable) هستند. این یعنی وقتی یک تاپل را ایجاد کردید، به هیچوجه نمیتوانید عضوی به آن اضافه کنید، عضوی را حذف کنید یا مقادیر فعلی آن را تغییر دهید. تاپلها معمولاً با استفاده از پرانتز () تعریف میشوند.
مثال از تعریف تاپل:
my_tuple = (10, 20, 30, "PySho")
print(my_tuple)
# تلاش برای تغییر مقدار (باعث خطا میشود)
# my_tuple[0] = 99 --> TypeError: 'tuple' object does not support item assignment
بررسی ۵ تفاوت اصلی لیست و تاپل
برای درک بهتر، تفاوتهای این دو ساختمان داده را در ۵ بخش کلیدی مقایسه میکنیم:
۱. تغییرپذیری (Mutability)
همانطور که اشاره شد، این اصلیترین تفاوت است. لیستها Mutable (قابل تغییر) و تاپلها Immutable (غیرقابل تغییر) هستند. به همین دلیل، اگر ساختار دادهای نیاز به بروزرسانی مداوم دارد، باید از لیست استفاده کنید.
۲. سینتکس و نحوه تعریف
-
لیست: با استفاده از براکت
[]ساخته میشود. -
تاپل: با استفاده از پرانتز
()ساخته میشود. (البته نوشتن پرانتز در پایتون الزامی نیست و صرفاً با قرار دادن کاما بین مقادیر نیز تاپل ساخته میشود).
۳. سرعت اجرا (Performance)
از آنجایی که تاپلها تغییرناپذیرند، پایتون در پسزمینه بهینهسازیهای خاصی روی آنها انجام میدهد. به دلیل ثابت بودن اندازه تاپل، زمان دسترسی به عناصر آن و همچنین سرعت پیمایش (Iterate) روی آن نسبت به لیستها سریعتر است.
۴. میزان مصرف حافظه (Memory)
تاپلها در مقایسه با لیستها حافظه (RAM) کمتری مصرف میکنند. لیستها برای اینکه بتوانند در آینده مقادیر جدیدی (مثلاً با دستور append) بپذیرند، بلوکهای حافظه اضافی به خود اختصاص میدهند. اما تاپلها دقیقاً به اندازه عناصرشان حافظه اشغال میکنند.
import sys
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
print("حجم لیست:", sys.getsizeof(my_list), "بایت") # حجم بیشتر
print("حجم تاپل:", sys.getsizeof(my_tuple), "بایت") # حجم کمتر
۵. متدهای در دسترس
-
لیستها: دارای دهها متد کاربردی برای دستکاری دادهها هستند؛ مانند
append(),remove(),pop(),insert(),sort()وreverse(). -
تاپلها: به دلیل تغییرناپذیر بودن، تنها دو متد ساده دارند:
count()(برای شمارش تعداد یک آیتم) وindex()(برای پیدا کردن جایگاه یک آیتم).
چه زمانی از لیست و چه زمانی از تاپل استفاده کنیم؟
از لیست (List) استفاده کنید اگر:
-
دادههای شما پویا هستند و در طول اجرای برنامه نیاز به اضافه، حذف یا ویرایش دارند.
-
نیاز به مرتبسازی (Sorting) دادهها دارید.
-
مجموعه دادههای شما در حال رشد است (مثلاً لیستی از کاربران ثبتنام شده در سایت).
از تاپل (Tuple) استفاده کنید اگر:
-
دادههای شما ثابت هستند و قرار نیست تغییر کنند (مانند روزهای هفته، مختصات جغرافیایی یک نقطه، یا تنظیمات اولیه برنامه).
-
نیاز به کلید برای دیکشنری (Dictionary) دارید. (لیستها به دلیل تغییرپذیری نمیتوانند کلید دیکشنری باشند، اما تاپلها میتوانند).
-
قصد دارید از یک تابع، چندین خروجی مختلف برگردانید (توابع در پایتون به صورت پیشفرض مقادیر چندگانه را در قالب تاپل برمیگردانند).
-
امنیت دادهها برایتان مهم است و میخواهید مطمئن شوید هیچ بخشی از کد، به صورت تصادفی مقادیر را تغییر نمیدهد.
جمعبندی
انتخاب بین لیست و تاپل در پایتون به ماهیت دادههای شما بستگی دارد. لیستها با انعطافپذیری بالای خود برای دادههای در حال تغییر بینظیرند، در حالی که تاپلها با سرعت بالاتر، مصرف حافظه کمتر و امنیت ساختاری، بهترین گزینه برای نگهداری دادههای ثابت و غیرقابلتغییر محسوب میشوند. شناخت درست این دو ساختمان داده، شما را یک قدم به نوشتن کدهای حرفهایتر و بهینهتر در پایتون نزدیک میکند.

بدون دیدگاه