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 में नहीं:
- List:
append,extend,insert,remove,pop,sort,reverse,clear - Tuple: सिर्फ
count()औरindex()— पढ़ने वाले methods
इसीलिए 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 — सीधा फैसला
- List — एक ही तरह के items का collection जो बढ़ता-घटता है: todos, rows, results, queue।
- Tuple — अलग-अलग तरह के fields का एक record:
("Asha", 91, "Delhi")यानी name, marks, city। यह "struct" है, collection नहीं। - Tuple — function से कई values लौटानी हों:
return min_val, max_valअसल में tuple ही है। - Tuple — dict की key चाहिए, या data को बदलने से बचाना है।
- List — JSON से आया data, क्योंकि
json.loadsarrays को list ही देता है।
एक अच्छा 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 नहीं।
- Tuple immutability — tuple बदलने की कोशिश — असली error देखो।
- Trying to modify a tuple — TypeError का सही fix।
- Copy vs reference — b = a copy नहीं है — mutability का सबसे बड़ा जाल।
- Swapping variables with tuples — tuple unpacking का classic use।
अक्सर पूछे जाने वाले सवाल
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 मिलता है।