لیستها و تاپلهای پایتون برای ذخیرهسازی داده استفاده میشوند. این ساختارها دادهها را به صورت مرتب و منظم نگهداری میکنند. اما چند فرق مهم بین آنها وجود دارد. برای مثال میتوان به مواردی مانند «تغییرپذیری» (Mutability)، کارآمدی، میزان حافظه مورد نیاز و غیره اشاره کرد. ساختمان داده لیست برای نگهداری دادههای قابل تغییر به کار برده میشود. بهترین مورد استفاده از لیست در زمان کار با دادههای پویا و همگن است. اما تاپل قابل تغییر نیست. در نتیجه برای نگهداری دادههای تثبیت شده با نوع غیرهمگن گزینه مناسبی است. برای انتخاب صحیح در زمان کار، باید تفاوت بین لیست و تاپل در پایتون را بلد باشیم.
آنچه در این مطلب میآموزید:
-
با تمام تفاوتهای بین لیست و تاپل در پایتون آشنا میشوید.
-
با دلیل تغییرپذیری لیست و نکات مثبت و منفی آن آشنا میشوید.
-
با دلیل تغییرناپذیری تاپل و مزیت و ضرر آن آشنا میشوید.
-
یاد میگیرید که چگونه میزان حافظه مصرفی تاپل و لیست را اندازه بگیرید.
-
روش اندازهگیری سرعت اجرای عملیات محاسباتی را میآموزید.
-
با عملیات مشترک بین لیست و تاپل آشنا شده و روش استفاده از آنها را میآموزید.

در این مطلب از مجله فرادرس با تفاوت لیست و تاپل در پایتون به طور کامل آشنا میشویم. ابتدا تمام تفاوتهای بین این دو ساختمان داده را در جدولی به صورت مرتب، نوشتهایم. سپس مهمترین تفاوتها مانند تغییرپذیری، کارآمدی و متدهای قابل اجرا بر روی این ساختارها را همراه با مثال توضیح دادهایم.
تفاوت لیست و تاپل در پایتون چیست؟
مهمترین تفاوت بین لیست و تاپل در پایتون مربوط به تغییرپذیری این ساختارهاست. لیستها تغییرپذیر هستند. یعنی اینکه بعد از ساخته شدن لیست، هم میتوانیم عناصر موجود در آن را تغییر دهیم و هم اندازه لیست را. در نتیجه، لیستها گزینه بسیار خوبی برای پردازش دادههای پویا هستند. از طرف دیگر، تاپلها غیرقابل تغییراند. یعنی اینکه بعد از ساخته شدن و مقداردهی اولیه تاپل، دیگر نمیتوانیم اندازه یا عناصر آن را دستکاری کنیم.
هر دو گزینه لیست و تاپل میتوانند انواع داده مختلف، مانند عدد صحیح، Float، رشته و دیکشنریهای پایتون را در خود ذخیره کنند. این دو ساختار از بعضی جهات، شباهتهایی هم به یکدیگر دارند. اما در این مطلب بر روی بررسی تفاوتهای بین آنها تمرکز کردهایم. در زمان تصمیم به انتخاب بین لیست و تاپل باید به عملیات مورد نیاز و رفتار برنامه با دادهها توجه کنیم.
در جدول زیر، تمام تفاوتهای بین لیست و پایتون را نوشتهایم.
لیست | تاپل |
تغییرپذیر | غیرقابل تغییر |
پیمایش زمانبر | پیمایش سریعتر |
مناسب برای عملیات ورود و خروج داده | مناسب از جهت دسترسی به عناصر |
مصرف بیشتر حافظه نسبت به تاپل | مصرف کمتر حافظه |
مستعد روبهرو شدن با خطاهای غیرمنتظره | امنیت بالا و احتمال بروز خطای کمتر |
دارای چندین متد «درونی» (Built-In) | متدهای درونی کمتر نسبت به لیست |
ساخت سادهتر – نیاز به دو بلوک در حافظه | ساخت سریعتر نسبت به لیست |
تعریف و مقداردهی با [] | تعریف و مقداردهی با () |
غیرقابل استفاده به عنوان کلید در دیکشنری | قابل استفاده به عنوان کلید در دیکشنری |
دارای ساختار مرتب | دارای ساختار با معنا |
بعضی از موارد جدول بالا نیاز به توضیح بیشتری دارند. این موارد را در فهرست زیر، توضیح دادهایم.
- استفاده به عنوان کلید در دیکشنری: کلیدهای دیکشنری باید دو ویژگی مهم داشته باشند. هم «قابل رمزنگاری» (Hashable) باشند و هم «غیرقابل تغییر» (Immutable). اما لیستها تغییرپذیر هستند. بنابراین نمیتوان از لیستها به عنوان کلید در دیکشنری استفاده کرد.
- مورد آخر و مربوط به ساختار: لیست از عناصری تشکیل شده که به صورت مرتب و منظم در کنار هم قرار میگیرند. این ترتیب هرگز تغییر نمیکند. اما از تاپلها معمولا برای ساختن ساختارهای با معنی استفاده میشود. برای مثال تاپل person = (“Ali”, 25, “Tehran”) در صورت جابهجایی عناصر معنی خود را از دست میدهد.

در بعضی از پردازشها حفظ ثبات و یکپارچگی دادهها حیاتی است. به دلیل غیرقابل تغییر بودن، تاپل به گزینه بسیار خوبی برای چنین پردازشهایی تبدیل شده است. اما در برنامهها یا عملیاتی که نیاز مکرر به بازنویسی دادهها دارند، لیست، عملکرد بسیار بهتری از خود نشان میدهند.

در ادامه مطلب، چند مورد از تفاوتهای معرفی شده در جدول را با استفاده از مثالهای مختلف بررسی کردهایم.
مقایسه تغییرپذیری لیست در مقابل تاپل
لیست تغییرپذیر است. یعنی آن که توسعهدهندگان میتوانند ابتدا لیست را با مشخصات مورد نظر خودشان بسازند. سپس عملیات مختلفی مانند تغییر، حذف یا افزودن عناصر به لیست را در طول زمان اجرای برنامه، انجام دهند. اما نمیتوان تاپلها را بعد از ساختن تغییر داد. در این بخش با کمک مثالهای سادهای هر دو مورد را بررسی کردهایم.
توجه کنید که تفاوت لیست و تاپل در پایتون، قابل چشمپوشی نیست. اما شباهتهای زیادی هم بین این دو ساختار وجود دارد. بنابراین بعضی از مواقع برنامه نویسان میتوانند از لیست و تاپل بهجای یکدیگر استفاده کنند. برای یادگیری شباهتها و تفاوتها در کنار هم، میتوانید فیلم آموزش رایگان داده ساختارهای List و Tuple در پایتون را از فرادرس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
مثالی درباره تغییرپذیری لیست
در مثال پایین، میخواهیم تغییرپذیری لیستها را بررسی کنیم. به این منظور، لیستی با عناصری از نوع Integer را به کار بردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
[1, 2, 4, 77, 3, 3, 3, 6, 5]
در مثال بالا، مقدار عنصر چهارم را از 4 به 77 تغییر دادیم. عنصر چهارم با شماره اندیس 3 مشخص میشود. زیرا در لیستها امکان تغییر دادن عناصر، وجود دارد.
مثالی درباره تغییرناپذیری تاپل
همینطور که اشاره کردیم، بعد ساخت و مقداردهی اولیه تاپل نمیتوان آن را تغییر داد. هر نوع تلاشی برای تغییردادن اعضای تاپل باعث برگرداندن پیغام خطا میشود. در مثال زیر، از تاپلی با عناصری از نوع «Integer» استفاده کردهایم.
بعد از اجرای کدهای بالا، پیغام خطای زیر در کنسول پایتون نمایش داده میشود.
Hangup (SIGHUP) Traceback (most recent call last): File "/home/guest/sandbox/Solution.py", line 4, in <module> b[0] = 4 ~^^^ TypeError: 'tuple' object does not support item assignment
تاپلها تغییرناپذیر هستند. بنابراین از عملیات تخصیص عضو نیز پشتیبانی نمیکنند. این ویژگی از ایجاد تغییرات غیرعمدی و ناخواسته در تاپل جلوگیری میکند.
بهترین روش یادگیری زبان برنامه نویسی پایتون
بهترین روش یادگیری هر کس، به مدل یادگیری و روحیه آن شخص وابسته است. روشهای مختلفی برای یادگیری وجود دارند. به عنوان نمونه میتوان به کلاسهای حضوری و آنلاین، یادگیری خودآموز با کمک منابع مختلف و غیره اشاره کرد. هر کدام از این روشها مزایا و معایب خاص خود را دارند. البته استفاده از فیلمهای آموزشی، برای بیشتر اشخاص موثر است. فیلمهای آموزشی امتیازهای زیادی دارند. این مزیتها آنها را نسبت به سایر متدها برتر میکند. به عنوان نمونه، میتوان به استفاده همزمان از حواس بینایی و شنیداری در هنگام آموزش و امکان تکرار تماشای فیلمها اشاره کرد.

فرادرس به عنوان بزرگترین تولید کننده محتوای آموزشی در کشور، فیلمهای بسیار خوبی در زمینههای متنوع تولید کرده است. یکی از زمینههای مورد علاقه فرادرس و مخاطبانش، حوزه تکنولوژیهای مربوط به کامپیوتر و برنامه نویسی است. زبان برنامه نویسی پایتون هم یکی از پرطرفدارترین گزینهها در میان همین علوم است. به همین دلیل، فیلمهای بسیار خوبی در زمینه آموزش پایتون توسط فرادرس تولید شده است. در پایین، چند مورد از فیلمهای آموزشی سطح متوسط و پیشرفته پایتون را معرفی کردهایم.
مقایسه کارآمدی لیست و تاپل در پایتون
در این بخش میخواهیم تفاوت لیست و تاپل در پایتون را از جهت کارآمدی بررسی کنیم. برای این کار باید به دو مسئله مهم توجه کنیم.
- میزان حافظه مصرفی: به مقدار فضایی گفته میشود که این ساختارها در حافظه اشغال میکنند.
- سرعت پیمایش: یعنی اینکه دیدن تمام عناصر هر ساختار از اول تا انتها چقدر زمان میبرد.
در ادامه، معیارهای بالا را با کمک مثالهای سادهای بررسی کردهایم.
بررسی میزان حافظه مصرفی
تاپلها از جهت مقدار حافظه مصرفی، عملکرد بهتری نسبت به لیستها دارند. زیرا این ساختارها در یک بلوک از حافظه ذخیره میشوند. همچنین – برعکس لیستها – به فضای اضافی برای اعمال تغییرات پویا نیاز ندارند. در زیر، مثالی را بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
88 64
خروجی بدست آمده از کدهای بالا نشان میدهد که لیستها فضای بیشتری نسبت به تاپلها مصرف میکنند. از آنجا که تاپلهای تغییرپذیر نیستند در نتیجه حافظه خیلی کمتری مصرف میکنند. بنابراین استفاده از تاپل برای ذخیرهسازی و کار با دادههای ثابت، انتخاب بسیار بهتری است.
بررسی سرعت پیمایش
تاپلها از جهت سرعت پیمایش و عملکرد هم نسبت به لیستها وضعیت بهتری دارند. غیرقابل تغییر بودن تاپلها به این علت است که عناصر خود را در خانههای متوالی از حافظه ذخیره میکنند. در زیر، مثالی را بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
9316501700 9666701200
عناصر تاپل در بلوکی از خانههای متوالی حافظه ذخیره میشوند. بنابراین، سرعت بیشتری نسبت به لیست دارد. البته اعداد بالا بسته به کامپیوتر و سیستم مورد استفاده ممکن است، تغییر کنند.

تفاوت بین عملیات قابل اجرا بر روی لیست و تاپل در پایتون
هر دو ساختار لیست و تاپل در پایتون، متدهای مخصوص خود را دارند. بعضی از متدها بین این دو ساختار مشترک هستند. برای نمونه میتوان به تکنیکهای اندیسگذاری، تکهتکه کردن، الحاق و غیره اشاره کرد. البته بین عملیات مشترک بین لیستها و تاپلها هم تفاوتهایی وجود دارد. علت اصلی این تفاوتها تغییرپذیری لیستها و تغییرناپذیری تاپلها است.
در این بخش از مطلب، ابتدا چند مورد از عملیات مشترک بین لیست و تاپل در پایتون را بررسی کردهایم. بعد از آنهم چند عملیات اختصاصی لیستها را معرفی کردیم.
اندیس گذاری
هم لیستها و هم تاپلها به برنامه نویسان اجازه میدهند که به هر کدام از عناصر به صورت مجزا دسترسی داشته باشند. برای این کار باید از اندیس مربوط به هر عنصر استفاده کنیم. در هر دو ساختار، اندیسها از شماره 0 شروع میشوند. در زیر، مثالی را بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
1 5
تکه تکه سازی
هر دو ساختار لیست و تاپل به توسعهدهندگان اجازه میدهند تا از تکنیک «تکهتکهسازی» یا (Slicing) استفاده کنند. این تکنیک به معنی جداسازی زیرمجموعهای از عناصر موجود در ساختار است. در کد زیر، از تکنیک تکهتکهسازی بر روی هر دو ساختار استفاده کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
[2, 3] (6, 7, 8)
الحاق
با استفاده از عملگر «+» میتوانیم لیستها را به همدیگر و تاپلها را هم به همدیگر بچسبانیم. در کد زیر، مثالی را بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
[1, 2, 3, 4, 5, 6] (7, 8, 9, 10, 11, 12)
عملیات اختصاصی لیست در پایتون
بعضی توابع برای تغییر دادن محتوای ساختمانهای داده به کار برده میشوند. از میان لیست و تاپل، فقط لیستها میتوانند از این نوع عملیات پشتیبانی کنند. زیرا محتوای تاپلها به هیچوجه تغییر نمیکند. در فهرست زیر، سه عملیات اختصاصی لیست در پایتون را معرفی کردهایم.
- افزودن: برای افزودن عنصر به لیست از متدی به نام append در پایتون استفاده میکنیم.
- گسترش دادن: برای گسترش دادن لیست میتوانیم آن را در لیست دیگری ادغام کنیم. به این منظور از متدی به نام extend() استفاده میکنیم.
- حذف کردن: برای حذف کردن عنصر از درون لیست، تابع remove() را به کار میبریم. این تابع، عنصری را به عنوان پارامتر دریافت میکند. سپس از اول لیست، شروع کرده و به دنبال آن عنصر میگردد. به محض پیدا کردن اولین رویداد از عنصر، آن را حذف کرده و جستوجو را متوقف میکند.

متدهای معرفی شده در بالا، بخش کوچکی از متدهای لیست در پایتون هستند. در زبان برنامه نویسی پایتون تعداد زیادی متد برای کار بر روی لیستها تعریف شدهاند. برای آشنایی با این متدها میتوانید مطلب مربوط به آنها را در مجله فرادرس مطالعه کنید.
در مثال پایین، هر سه متد بالا را به کار بردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
[1, 3, 4, 5, 6]
در کد بالا، از هر سه متد معرفی شده استفاده کردهایم. در پایین، رفتار این متدها را توضیح دادهایم.
- دستور append(4) عدد 4 را به انتهای لیست اضافه میکند. در نتیجه لیست برابر با [1, 2, 3, 4] میشود.
- دستور extend([5, 6]) چند عنصر جدید یعنی 5 و 6 را به لیست a اضافه میکند. در واقع لیستی را که به عنوان پارامتر دریافت کرده در لیست a ادغام میکند. بنابراین، لیست a بهروزرسانی شده و مقدار آن برابر با [1, 2, 3, 4, 5, 6] میشود.
- در آخر هم متد remove(2) اولین رخداد از عدد 2 در لیست را حذف میکند. در نتیجه مقدار نهایی لیست برابر با [1, 3, 4, 5, 6] میشود.

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

تفاوت لیست و تاپل در پایتون از جهت دیباگ کردن
در پروژههایی با مقیاس بزرگ، دیباگکردن تاپلها سادهتر است. زیرا تاپلها قابل تغییر نیستند. اما در پروژههای کوچک و با حجم دادهی کم، استفاده از لیستها گزینه بهتری برای نوشتن برنامههای کارآمد است. با کمک مثال پایین این مطلب را بهتر درک میکنیم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نمایش داده میشود.
[11, 'Scaler', 'Academy', 34] [11, 'Scaler', 'Academy', 34]
در برنامه بالا دستور b = a را نوشتهایم. این دستور به معنی کپی کردن شیء لیست a در متغیر b نیست. بلکه متغیر b اکنون به آدرس لیست a اشاره میکند. یعنی آن که هر تغییری در لیست a ایجاد شود، همان تغییر در لیست b هم نشان داده میشود. بنابراین عیبیابی این برنامه ساده است. اما اگر اشیاء پایتون چندین مرجع مختلف داشته باشند و برنامه بزرگ باشد، پیدا کردن خطا مشکل میشود. ردیابی چنین تغییراتی در برنامههای بزرگ، بسیار پیچیده و سردرگم کننده است. از طرف دیگر، اشیاء غیرقابل تغییری مانند تاپلها بعد از ساخته شدن دیگر قابل دستکاری نیستند. بنابراین استفاده از تاپلها در برنامههای بزرگ و پیچیده، عملیات دیباگکردن را سادهتر میکند.
جمعبندی
از تاپلها برای کار با دادههایی استفاده میکنیم که نباید تغییر کنند. بنابراین امنیت دادههای ذخیره شده در تاپل بیشتر است. در این مطلب از مجله فرادرس تفاوت لیست و تاپل در پایتون را به شکل کامل بررسی کردهایم. همچنین، تمام تفاوتهای این ساختارها را در جدولی به شکل مرتب جمعآوری کردیم. تفاوت اصلی آنها تغییرناپذیری تاپل و تغییرپذیری لیستها است. سینتکس مورد استفاده برای ساخت و استفاده از تاپل شامل پرانتزهای باز و بسته () است. در حالی که لیستها را با کروشه باز و بسته [] نشان میدهیم.
لیستها و تاپلها هر دو ساختارهایی برای ذخیره انواع اشیاء در پایتون هستند. این ساختارها عناصر درون خود را به صورت متوالی نگهداری میکنند. بنابراین با کمک اندیس میتوانیم به تمام عناصر آنها به شکل مجزا دسترسی داشته باشیم. از تاپلها میتوان به عنوان کلید دیکشنری در پایتون استفاده کرد. زیرا آنها هم قابل هش شدن هستند و هم غیرقابل تغییراند. اما نمیتوان از لیستها به عنوان کلید در دیکشنری استفاده کرد.
source