← Back

Home › Hindi › List vs Tuple Hindi में

List vs Tuple — अंतर, और कब क्या use करें

🌐 यह page Hindi में है · Read the English guide →

Mutable vs immutableMemory + speedDict key वाला नियमInterview सवाल शामिल

एक line में अंतर

List बदल सकती है, tuple नहीं। बस यही बुनियादी फर्क है — बाकी सारे फर्क (memory, speed, dict key, safety) इसी एक बात से निकलते हैं।

nums = [1, 2, 3]      # list  — [] से
point = (4, 5)        # tuple — () से

nums[0] = 99          # ✅ चलता है
point[0] = 99         # ❌ TypeError: 'tuple' object does not support item assignment

ध्यान रखो: immutable का मतबल यह नहीं कि tuple के अंदर का सब कुछ frozen है। अगर tuple में list रखी है तो वह list बदल सकती है:

t = (1, [2, 3])
t[1].append(4)     # ✅ tuple वही है, अंदर की list बदल गई
print(t)           # (1, [2, 3, 4])
t[0] = 5           # ❌ अब भी TypeError

Mutability का असली नतीजा

बदलने वाले methods list में हैं, tuple में नहीं:

इसीलिए tuple safe है: अगर आपने किसी function को tuple दी, तो वह उसे चुपचाप बदल नहीं सकता। List देने पर वह बदल सकता है, और बदलाव आपके पास भी दिखेगा:

def add_ten(items):
    items.append(10)     # caller की list भी बदल जाती है

a = [1, 2]
add_ten(a)
print(a)                 # [1, 2, 10]  — surprise!

यह "surprise" Python की सबसे common source of bugs में से एक है। अगर data बदलना ही नहीं चाहिए, tuple पास करो।

Memory और speed

Tuple का size fixed है, इसलिए Python उसे एक ही बार allocate करता है। List को बढ़ने के लिए extra जगह रखनी पड़ती है। छोटे data पर फर्क साफ़ दिखता है:

import sys
print(sys.getsizeof([1, 2, 3]))    # 88
print(sys.getsizeof((1, 2, 3)))    # 64

%timeit [1, 2, 3]                  # धीमा
%timeit (1, 2, 3)                  # ~2x तेज़ — tuple constant fold हो जाता है

पर साफ़ कह दें: यह फर्क तब मायने रखता है जब लाखों objects हों। 10 items के लिए tuple इसलिए चुनो क्योंकि वह intent साफ़ करता है — "यह data बदलेगा नहीं" — performance के लिए नहीं।

Dict key वाला नियम (interview favourite)

Dict अपनी keys को hash करके रखती है। Mutable object का hash बदल सकता है, इसलिए वह key नहीं बन सकता:

d = {}
d[(1, 2)] = "origin"    # ✅ tuple key चलेगी
d[[1, 2]] = "origin"    # ❌ TypeError: unhashable type: 'list'

इसीलिए coordinates, (row, column) pairs और composite keys हमेशा tuple में रखे जाते हैं। यह सवाल लगभग हर Python interview में आता है — जवाब दो line में: "list mutable है इसलिए unhashable है; tuple immutable है इसलिए dict key बन सकती है।"

कब list, कब tuple — सीधा फैसला

एक अच्छा mental model: list = collection (एक ही type के कई items), tuple = record (अलग-अलग type के fields एक साथ)।

Unpacking और बाकी छोटे फर्क

point = (4, 5)
x, y = point               # unpacking दोनों में चलता है
first, *rest = [1, 2, 3]   # rest एक list है, tuple नहीं

print((1))                 # 1   — यह tuple नहीं, सिर्फ bracket वाला int है
print((1,))                # (1,) — एक-item tuple के लिए comma ज़रूरी

print([1, 2] * 2)          # [1, 2, 1, 2]
print((1, 2) * 2)          # (1, 2, 1, 2)  — repeat दोनों में काम करता है

वह (1,) वाला comma सबसे ज़्यादा miss होता है। (1) tuple नहीं है — यह सिर्फ parentheses में लिखा integer है।

🛠️ Practice करो (free, browser में)

पढ़ना काफी नहीं — यही bug खुद fix करके देखो। नीचे के problems browser में ही चलते हैं, कोई install नहीं, कोई login नहीं।

सारे free problems देखो →

अक्सर पूछे जाने वाले सवाल

List और Tuple में सबसे ज़रूरी अंतर क्या है?

List mutable है — append, sort और item assignment चलता है। Tuple immutable है — बनने के बाद बदल नहीं सकती। बाकी सारे फर्क (memory, speed, dict key बनना, safety) इसी एक बात से आते हैं।

Tuple dictionary की key क्यों बन सकती है, list क्यों नहीं?

Dict keys को hash करना पड़ता है, और hash तभी काम करता है जब object कभी न बदले। List बदल सकती है इसलिए unhashable है; tuple नहीं बदलती इसलिए hashable है। ध्यान रहे — अंदर list रखने वाली tuple भी unhashable हो जाती है।

Tuple list से तेज़ होती है?

बनाने में हाँ, करीब दोगुनी — क्योंकि size fixed है और constant tuples fold हो जाते हैं। पर असली वजह tuple चुनने की performance नहीं, intent है: tuple कहता है कि यह data बदलेगा नहीं, इसलिए पढ़ने वाला और Python दोनों उस पर भरोसा कर सकते हैं।

एक item की tuple कैसे बनाते हैं?

Trailing comma लगाकर: (1,) एक tuple है, जबकि (1) सिर्फ parentheses में लिखा integer 1 है। यही सबसे common गलती है — comma भूल जाने पर type पूरी तरह बदल जाता है और बाद में unpacking पर TypeError मिलता है।

आगे पढ़ो