পার্থক্য কি?
টিপলস / তালিকার সুবিধা / অসুবিধাগুলি কী কী?
list
। ; ডি
পার্থক্য কি?
টিপলস / তালিকার সুবিধা / অসুবিধাগুলি কী কী?
list
। ; ডি
উত্তর:
টিপলগুলি অপরিবর্তনীয় হওয়া ছাড়াও একটি অর্থগত পার্থক্য রয়েছে যা তাদের ব্যবহারকে গাইড করতে পারে। টিপলগুলি হ'ল ডিগ্রি স্ট্রাকচার (যেমন, তাদের এন্ট্রিগুলির পৃথক অর্থ রয়েছে), যখন তালিকাটি একজাতীয় ক্রম হয়। টিপলসের কাঠামো থাকে, তালিকার অর্ডার থাকে।
এই পার্থক্যটি ব্যবহার করা কোডটিকে আরও স্পষ্ট এবং বোধগম্য করে তোলে।
একটি উদাহরণ পৃষ্ঠার জোড়া এবং কোনও বইয়ের রেফারেন্স অবস্থানগুলির জন্য লাইন নম্বর হবে, যেমন:
my_location = (42, 11) # page number, line number
এরপরে আপনি লোকেশনগুলিতে নোট সঞ্চয় করতে অভিধানের কী হিসাবে এটি ব্যবহার করতে পারেন। অন্যদিকে একটি তালিকা একাধিক অবস্থান সঞ্চয় করতে ব্যবহৃত হতে পারে। স্বাভাবিকভাবেই কেউ তালিকা থেকে অবস্থানগুলি যুক্ত করতে বা সরাতে চাইবে, সুতরাং এটি বোঝা যায় যে তালিকাটি পরিবর্তনযোগ্য। অন্যদিকে বিদ্যমান অবস্থান থেকে আইটেমগুলি যুক্ত করা বা অপসারণ করার কোনও মানে হয় না - তাই টিপলগুলি অপরিবর্তনীয়।
এমন পরিস্থিতি থাকতে পারে যেখানে আপনি বিদ্যমান অবস্থানের আইটেমের মধ্যে আইটেমগুলি পরিবর্তন করতে চান, উদাহরণস্বরূপ কোনও পৃষ্ঠার লাইনের মধ্য দিয়ে পুনরাবৃত্তি করার সময়। কিন্তু দ্বৈত অপরিবর্তনীয়তা আপনাকে প্রতিটি নতুন মানের জন্য একটি নতুন অবস্থানের টিপল তৈরি করতে বাধ্য করে। এটি এর মুখোমুখি অসুবিধাজনক বলে মনে হয়, তবে এইরকম অপরিবর্তনীয় ডেটা ব্যবহার করা মান ধরণের এবং কার্যকরী প্রোগ্রামিং কৌশলগুলির একটি ভিত্তি, যার যথেষ্ট সুবিধা থাকতে পারে।
এই ইস্যুতে কিছু আকর্ষণীয় নিবন্ধ রয়েছে, যেমন "পাইথন টিপলস কেবলমাত্র ধ্রুবক তালিকাগুলি নয়" বা "পাইথন-এর তালিকা সম্পর্কিত বনাম তালিকাগুলি বোঝা" । অফিসিয়াল পাইথন ডকুমেন্টেশনেও এর উল্লেখ রয়েছে
"টিপলগুলি অপরিবর্তনীয় এবং সাধারণত একটি ভিন্ন ভিন্ন ক্রম থাকে ..."
স্ট্যাটিক্যালি টাইপ করা ভাষায় যেমন হাস্কেলের একটি টিপলের মানগুলি সাধারণত বিভিন্ন ধরণের থাকে এবং টিউপলের দৈর্ঘ্য অবশ্যই নির্ধারণ করতে হবে। একটি তালিকায় মানগুলির মধ্যে একই ধরণের মান এবং দৈর্ঘ্য নির্ধারিত হয় না। সুতরাং পার্থক্য খুব সুস্পষ্ট।
অবশেষে পাইথনে নেমটুপল রয়েছে, এটি অর্থবোধ করে কারণ একটি টুপলের ইতিমধ্যে কাঠামো থাকার কথা। এটি এই ধারণাটিকে আন্ডারলাইন করে যে টিউপলগুলি ক্লাস এবং উদাহরণগুলির জন্য হালকা ওজনের বিকল্প are
collections.namedtuple
আরও ভাল বলা হবে collections.record
। কোনও গ্রাহকের রেকর্ডে নাম এবং ঠিকানা অদলবদল করা, বলার কোনও অর্থ নেই; প্রকৃতপক্ষে, এটি করা সাধারণত একটি ত্রুটি হতে পারে, যা দ্বিপথের অপরিবর্তনীয়তা আপনাকে প্রতিশ্রুতিবদ্ধ হতে বাধা দেয়।
What would you do with such a list?
, পিপিএল যখন যুক্তি হিসাবে কল্পনার অভাব ব্যবহার করে তখন আমি সর্বদা কাঁপুন । মিশ্র প্রকারের তালিকাগুলি ব্যবহার করা দুর্দান্ত উদাহরণস্বরূপ কিছু শ্রেণিবদ্ধ ডেটা স্ট্রাকচারের জন্য যেখানে প্রতিটি তালিকা শিশু তালিকা এবং মান-উপাদানগুলির সমন্বয়ে গঠিত।
তালিকা এবং tuple মধ্যে পার্থক্য
আক্ষরিক
someTuple = (1,2)
someList = [1,2]
আয়তন
a = tuple(range(1000))
b = list(range(1000))
a.__sizeof__() # 8024
b.__sizeof__() # 9088
একটি টিউপল অপারেশন ছোট আকারের কারণে, এটি কিছুটা দ্রুত হয়ে যায়, তবে আপনার বিপুল সংখ্যক উপাদান না আসা পর্যন্ত এটি উল্লেখ করার মতো নয়।
অনুমোদিত ক্রিয়াকলাপ
b = [1,2]
b[0] = 3 # [3, 2]
a = (1,2)
a[0] = 3 # Error
এর অর্থ হ'ল আপনি কোনও উপাদান মুছতে বা একটি টিপল বাছাই করতে পারবেন না। তবে আপনি উভয় তালিকায় একটি নতুন উপাদান যুক্ত করতে পারেন এবং কেবলমাত্র এই পার্থক্যের সাথে টিপল করতে পারেন যেহেতু টিপলটি পরিবর্তনযোগ্য, তাই আপনি সত্যিই কোনও উপাদান যুক্ত করছেন না তবে আপনি একটি নতুন টিপল তৈরি করছেন, সুতরাং আইডি পরিবর্তিত হবে
a = (1,2)
b = [1,2]
id(a) # 140230916716520
id(b) # 748527696
a += (3,) # (1, 2, 3)
b += [3] # [1, 2, 3]
id(a) # 140230916878160
id(b) # 748527696
ব্যবহার
একটি তালিকা যেমন পরিবর্তনযোগ্য, তেমন একটি অভিধানে কী হিসাবে ব্যবহার করা যায় না, যেখানে একটি টুপল ব্যবহার করা যেতে পারে।
a = (1,2)
b = [1,2]
c = {a: 1} # OK
c = {b: 1} # Error
3. Permitted operation
টিউপল কেস দেখায়। আমি জানি যে সাফল্য দেখাতে হবে তবে ত্রুটি, তবে এটি কয়েক মুহুর্তের জন্য আমার মাথার সাথে মিশে গেল।
one_item_list = [a]
, তবে one_tuple = (a,)
এটি সম্পর্কিত টিউপল। পরিবর্তনশীল নামটি অনুসরণ করে কমাটি নোট করুন। তবে নোট করুন two_tuple = (a, b)
। এটি আমাকে একাধিকবার ছুঁড়ে ফেলেছে (এখনও পাইথন 3 তে রয়েছে)।
tuple(sorted(the_unsorted_tuple))
আপনি যদি বেড়াতে যান, আপনি কোনও স্থির সময়ে কোনও স্থানে আপনার স্থানাঙ্কগুলি নোট করতে পারেন (x,y)
।
আপনি যদি নিজের যাত্রা রেকর্ড করতে চান তবে আপনি প্রতি কয়েক সেকেন্ডের জন্য তালিকায় নিজের অবস্থান যুক্ত করতে পারেন।
তবে আপনি অন্যভাবে এটি করতে পারেন নি।
মূল পার্থক্য হ'ল টিপলগুলি অপরিবর্তনীয়। এর অর্থ হ'ল একবার তৈরি করার পরে আপনি মানগুলিকে টিউপলে পরিবর্তন করতে পারবেন না।
সুতরাং আপনি যদি মান পরিবর্তন করতে প্রয়োজন একটি তালিকা ব্যবহার করুন।
টিপলস উপকারিতা:
frozenset
বা বিভিন্ন তৃতীয় পক্ষের হিমশীতল ডিক / ট্রি / ইত্যাদি। প্রকারভেদ, কিন্তু এগুলির মধ্যে কেউ আপনাকে পরিবর্তনীয় উপাদান যুক্ত করতে দেয় না। (এবং অবশ্যই একটি টিউপল কেবল তখনই হাস্যযোগ্য যদি এর সমস্ত উপাদানগুলি হয়, যা সাধারণ ইএএফপি উপায়ে পরিচালনা করা হয়, তাই d[1, [2]]
উত্থাপন করবে TypeError: unhashable type: 'list'
))
তালিকাগুলি পরিবর্তনযোগ্য; tuples হয় না।
ডকস.পিথন.আর. / 2 / টিউটোরিয়াল / ডেটাস্ট্রিকচারস html থেকে
টিউপসগুলি অপরিবর্তনীয়, এবং সাধারণত আনপ্যাকিংয়ের মাধ্যমে অ্যাক্সেস করা উপাদানগুলির একটি বিজাতীয় ক্রম থাকে (পরে এই বিভাগে দেখুন) বা সূচীকরণ (বা এমনকি নেমটুপলসের ক্ষেত্রেও গুণাবলী দ্বারা)। তালিকাগুলি পরিবর্তনীয় এবং এগুলির উপাদানগুলি সাধারণত একজাতীয় থাকে এবং তালিকাটি পুনরাবৃত্তি করে অ্যাক্সেস করা হয়।
এটি উল্লেখ করা হয়েছে যে পার্থক্যটি মূলত: শব্দার্থক: লোকেরা বিভিন্ন তথ্য উপস্থাপনের জন্য একটি টিপল এবং তালিকা আশা করে। তবে এটি একটি গাইডলাইন থেকে আরও এগিয়ে যায়; কিছু লাইব্রেরি আসলে কী পাস হয় তার ভিত্তিতে ভিন্ন আচরণ করে। উদাহরণস্বরূপ নম্পপি নিন ( অন্য পোস্ট থেকে অনুলিপি করা যেখানে আমি আরও উদাহরণের জন্য জিজ্ঞাসা করি):
>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
[3, 4, 5]])
মুল বক্তব্যটি হ'ল, যদিও নুমপি স্ট্যান্ডার্ড লাইব্রেরির অংশ নাও থাকতে পারে, এটি একটি প্রধান পাইথন গ্রন্থাগার এবং নুমপির তালিকাগুলির মধ্যে এবং টিপলগুলি সম্পূর্ণ আলাদা জিনিস।
type(a_list) != type(a_tuple)
, সুতরাং লাইব্রেরি কোডের শাখাগুলির কোনও অংশ type(x)
অন্যরকম আচরণ করবে
'%d %d' % [2, 3]
এটি একটি TypeError
, কারণ আপনি প্রথমে একটি তালিকা পাস করার চেষ্টা করছেন %d
এবং আপনি দ্বিতীয়টিতে কোনও মান পাস করছেন না %d
। (তবে max
তালিকাসমূহ লুপিং জন্য, tuples কাঠামো অর্থাত জন্য "%s %s" %tuple
।
তালিকাগুলি সাধারণত একজাতীয় হয়, টিপলগুলি সাধারণত ভিন্নজাতীয় হয়।
তালিকা পরিবর্তনশীল দৈর্ঘ্যের জন্য, টিপলস নির্দিষ্ট দৈর্ঘ্যের জন্য।
এটি পাইথন তালিকার উদাহরণ:
my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]
এটি পাইথন টিপলের উদাহরণ:
my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")
পাইথন তালিকাগুলি এবং টিপলগুলি একই রকম যে এগুলি উভয়কেই মান সংগ্রহের আদেশ দেওয়া হয়। "[..., ...]" বন্ধনী ব্যবহার করে "(..., ...)" এবং "(..., ...)" টিউপস ব্যবহার করে তালিকার তৈরি অগভীর পার্থক্য ছাড়াও মূল প্রযুক্তিগত "পাইথন সিনট্যাক্সে হার্ড কোডিং" তাদের মধ্যে পার্থক্য এটি হ'ল কোনও নির্দিষ্ট টিউপলের উপাদানগুলি অপরিবর্তনীয়, তবে তালিকাগুলি পরিবর্তনযোগ্য (... সুতরাং কেবলমাত্র টিপলগুলি হ্যাশযোগ্য এবং অভিধান / হ্যাশ কী হিসাবে ব্যবহার করা যেতে পারে!)। এটি কীভাবে তারা ব্যবহার করতে পারে বা কীভাবে ব্যবহার করতে পারে না তার মধ্যে পার্থক্যের জন্ম দেয় (সিনট্যাক্স দ্বারা একটি প্রাইরি প্রয়োগ করা হয়) এবং লোকেরা কীভাবে তাদের ব্যবহার করতে বেছে নেয় তার মধ্যে পার্থক্য ('সেরা অনুশীলন হিসাবে উত্সাহিত করা,' পোস্টারিয়েরি, স্মার্ট প্রগ্রেমাররা এটিই করেন )। মানুষ উপাদান ক্রম দিতে।
টিপলসগুলির জন্য, 'অর্ডার' তথ্য ধারণের জন্য কেবল একটি নির্দিষ্ট 'কাঠামো' ছাড়া আর কিছুই বোঝায় না। প্রথম ক্ষেত্রে যা মান পাওয়া যায় তা সহজেই দ্বিতীয় ক্ষেত্রে স্যুইচ করা যায় কারণ প্রতিটি দুটি ভিন্ন মাত্রা বা স্কেল জুড়ে মান সরবরাহ করে। তারা বিভিন্ন ধরণের প্রশ্নের উত্তর সরবরাহ করে এবং সাধারণত ফর্মের হয়: প্রদত্ত বস্তু / বিষয়গুলির জন্য এর বৈশিষ্ট্যগুলি কী কী? অবজেক্ট / বিষয় স্থির থাকে, গুণাবলী পৃথক হয়।
তালিকার জন্য, 'অর্ডার' একটি ক্রম বা দিকনির্দেশকে বোঝায় sign দ্বিতীয় উপাদানটি প্রথম উপাদানটির পরে অবশ্যই আসে কারণ এটি একটি নির্দিষ্ট এবং সাধারণ স্কেল বা মাত্রার উপর ভিত্তি করে ২ য় স্থানে অবস্থিত। উপাদানগুলি সামগ্রিকভাবে নেওয়া হয় এবং বেশিরভাগই কোনও নির্দিষ্ট বৈশিষ্ট্যের জন্য ফর্মের একক প্রশ্নের উত্তর সরবরাহ করে , কীভাবে এই বিষয়গুলি / বিষয়গুলির তুলনা করা যায়? বৈশিষ্ট্য স্থির থাকে, অবজেক্ট / বিষয় পৃথক হয়।
জনপ্রিয় সংস্কৃতি এবং প্রোগ্রামারগুলিতে এমন অসংখ্য ব্যক্তি রয়েছে যারা এই পার্থক্যগুলি মেনে চলে না এবং এমন অসংখ্য মানুষ আছেন যারা তাদের মূল পথের জন্য সালাদ কাঁটাচামচ ব্যবহার করতে পারেন। দিন শেষে, এটি ঠিক আছে এবং উভয়ই সাধারণত কাজটি করতে পারেন।
কিছু সূক্ষ্ম বিবরণ সংক্ষিপ্ত বিবরণ
মিল:
সূচীকরণ, নির্বাচন করা এবং স্লাইসিং - বন্ধনীগুলির মধ্যে পাওয়া পূর্ণসংখ্যার মানগুলি ব্যবহার করে উভয় টিপলস এবং তালিকা সূচক। সুতরাং, আপনি যদি কোনও প্রদত্ত তালিকার প্রথম বা তিনটি মান চান তবে বাক্য গঠনটি একই হবে:
>>> my_list[0:3]
[0,1,2]
>>> my_tuple[0:3]
[a,b,c]
তুলনা এবং বাছাই করা - দুটি টিপল বা দুটি তালিকাগুলি উভয়ই তাদের প্রথম উপাদানটির সাথে তুলনা করা হয় এবং যদি কোনও টাই থাকে তবে দ্বিতীয় উপাদান দ্বারা, এবং আরও অনেক কিছু। পূর্ববর্তী উপাদানগুলি পার্থক্য দেখানোর পরে পরবর্তী উপাদানগুলিতে আর মনোযোগ দেওয়া হয় না।
>>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
True
>>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
True
পার্থক্য: - সংজ্ঞা অনুসারে একটি অগ্রাধিকার
সিনট্যাক্স - তালিকার ব্যবহার [], টিপলস ব্যবহার ()
মিউটিবিলিটি - প্রদত্ত তালিকার উপাদানগুলি পারস্পরিক পরিবর্তনযোগ্য, প্রদত্ত টুপলের উপাদানগুলি পরিবর্তনীয় নয়।
# Lists are mutable:
>>> top_rock_list
['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
>>> top_rock_list[1]
'Kashmir'
>>> top_rock_list[1] = "Stairway to Heaven"
>>> top_rock_list
['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']
# Tuples are NOT mutable:
>>> celebrity_tuple
('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
>>> celebrity_tuple[5]
'Dead'
>>> celebrity_tuple[5]="Alive"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
হ্যাশটবেল (অভিধান) - হিসাবে এটির চাবিগুলি হ্যাশযোগ্য এবং অতএব অপরিবর্তনীয়, কেবল টিপলগুলি অভিধান কী হিসাবে কাজ করতে পারে, তালিকা নয়।
#Lists CAN'T act as keys for hashtables(dictionaries)
>>> my_dict = {[a,b,c]:"some value"}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
#Tuples CAN act as keys for hashtables(dictionaries)
>>> my_dict = {("John","Wayne"): 90210}
>>> my_dict
{('John', 'Wayne'): 90210}
পার্থক্য - ব্যবহারের ক্ষেত্রে একটি পোস্টেরিয়েরি
উপাদানসমূহের হোমো বনাম ভিন্ন ভিন্নতা - সাধারণত তালিকাভুক্ত বস্তুগুলি সমজাতীয় এবং দ্বিখণ্ডিত বস্তুগুলি ভিন্নজাতীয় হয়। তা হল, তালিকাগুলি একই ধরণের অবজেক্ট / বিষয়গুলির জন্য ব্যবহৃত হয় (সমস্ত রাষ্ট্রপতি প্রার্থী, বা সমস্ত গান, বা সমস্ত রানার যেমন) যদিও এটি বাধ্যতামূলক হয় না), যেখানে টিউপলগুলি ভিন্ন ভিন্ন ভিন্ন বস্তুর জন্য বেশি।
লুপিং বনাম কাঠামো - যদিও উভয়ই লুপিংয়ের অনুমতি দেয় (মাই_লিস্টে এক্স এর জন্য ...) তবে এটি কেবলমাত্র তালিকার জন্য এটি করা বোধগম্য। তথ্য কাঠামোবদ্ধ ও উপস্থাপনের জন্য টিউপসগুলি আরও উপযুক্ত (% s% s% s এর মধ্যে থাকা একটি% s এবং বর্তমানে% s% ("জন", "ওয়েন", 90210, "অভিনেতা", "মৃত"))
টিপলস এবং তালিকাগুলি উভয়ই পাইথনের মধ্যে আপাতদৃষ্টিতে অনুরূপ ক্রমের ধরণ।
আক্ষরিক বাক্য গঠন
আমরা একটি নতুন তালিকা পেতে টিউপস এবং বর্গাকার বন্ধনী নির্মাণের জন্য বন্ধনী ( ) ব্যবহার করি
[ ]
। এছাড়াও প্রয়োজনীয় কাঠামো - টিপল বা তালিকা পেতে আমরা উপযুক্ত ধরণের কল ব্যবহার করতে পারি।
someTuple = (4,6)
someList = [2,6]
পরিবর্তনশীলতা
টিপলগুলি অপরিবর্তনীয়, তবে তালিকাগুলি পরিবর্তনযোগ্য। এই পয়েন্টটি নিম্নলিখিতগুলির জন্য ভিত্তি।
স্মৃতি এর ব্যবহার
পরিবর্তনের কারণে আপনার তালিকাগুলির জন্য আরও মেমরি এবং টিউপসগুলির জন্য কম স্মৃতি দরকার।
ব্যাপ্ত
আপনি কেবলমাত্র টিউপস এবং তালিকার উভয় ক্ষেত্রেই নতুন উপাদান যুক্ত করতে পারেন যে টিপলের আইডি পরিবর্তিত হবে (অর্থাত, আমাদের কাছে একটি নতুন অবজেক্ট থাকবে)।
হ্যাশ
টিপলগুলি হ্যাশযোগ্য এবং তালিকাগুলি নেই। এর অর্থ আপনি কোনও অভিধানে কী হিসাবে একটি টুপল ব্যবহার করতে পারেন। তালিকাটি অভিধানে কী হিসাবে ব্যবহার করা যাবে না, যেখানে একটি টুপল ব্যবহার করা যেতে পারে
tup = (1,2)
list_ = [1,2]
c = {tup : 1} # ok
c = {list_ : 1} # error
শব্দার্থবিদ্যা
এই পয়েন্টটি সেরা অনুশীলন সম্পর্কে আরও বেশি। আপনার ভিন্ন ভিন্ন ডেটা স্ট্রাকচার হিসাবে টিপলস ব্যবহার করা উচিত, যখন তালিকাগুলি একজাতীয় ক্রম হয়।
তালিকাটি সমজাতীয় ক্রম হিসাবে লক্ষ্য করা যায়, যখন টিপলগুলি ভিন্ন ভিন্ন ডেটা কাঠামো।
যেহেতু লোকেরা এখানে ইতিমধ্যে উত্তর দিয়েছে যা পরিবর্তনীয় tuples
অবস্থায় lists
অদলবদল হয় তবে টিপলস ব্যবহারের একটি গুরুত্বপূর্ণ দিক রয়েছে যা আমাদের অবশ্যই মনে রাখতে হবে
যদি এর ভিতরে tuple
একটি list
বা একটি থাকে dictionary
তবে সেগুলি tuple
নিজেই অপরিবর্তিত থাকলেও তা পরিবর্তন করা যায়।
উদাহরণস্বরূপ, ধরে নেওয়া যাক আমাদের একটি টুপল রয়েছে যার মধ্যে একটি তালিকা এবং অভিধান রয়েছে
my_tuple = (10,20,30,[40,50],{ 'a' : 10})
আমরা তালিকার বিষয়বস্তু হিসাবে পরিবর্তন করতে পারি
my_tuple[3][0] = 400
my_tuple[3][1] = 500
যা নতুন টিপলকে দেখতে সুন্দর করে তোলে
(10, 20, 30, [400, 500], {'a': 10})
আমরা ডুপ্লির ভিতরে ডিকশনারিও পরিবর্তন করতে পারি
my_tuple[4]['a'] = 500
যা সামগ্রিকভাবে টিপলকে দেখতে সুন্দর করে তুলবে
(10, 20, 30, [400, 500], {'a': 500})
এটি হ'ল কারণ list
এবং এটি হ'ল dictionary
অবজেক্ট এবং এই বস্তুগুলি পরিবর্তিত হচ্ছে না, তবে সামগ্রীগুলি এতে নির্দেশ করছে।
সুতরাং tuple
কোনও ব্যতিক্রম ছাড়াই অব্যাহত থাকে
PEP 484 - প্রকার ইঙ্গিত বলছেন যে একটি উপাদানের ধরনের tuple
স্বতন্ত্রভাবে টাইপ করা যেতে পারে; যাতে আপনি বলতে পারেন Tuple[str, int, float]
; তবে একটি list
, List
টাইপিং ক্লাসের সাথে কেবলমাত্র এক ধরণের প্যারামিটার নিতে পারে: List[str]
যা ইঙ্গিত দেয় যে 2 এর পার্থক্যটি হ'ল পূর্বেরটি ভিন্নধর্মী, অন্যদিকে পরেরটি অভ্যন্তরীণভাবে সমজাতীয়।
এছাড়াও, স্ট্যান্ডার্ড গ্রন্থাগারটি বেশিরভাগ ক্ষেত্রে এমন স্ট্যান্ডার্ড ফাংশনগুলি থেকে ফিরতি মান হিসাবে টিপল ব্যবহার করে যেখানে সি একটি ফেরত দেয় struct
।
লোকেরা ইতিমধ্যে পার্থক্যগুলি উল্লেখ করেছে যেহেতু টিপলস কেন তা নিয়ে লিখব।
কেন tuples পছন্দ হয়?
ছোট টিপলসের জন্য বরাদ্দ অনুকূলিতকরণ
মেমরি বিভাজন কমাতে এবং বরাদ্দকে ত্বরান্বিত করতে পাইথন পুরানো টিপলগুলি পুনরায় ব্যবহার করে। যদি কোনও টিউপলের আর প্রয়োজন হয় না এবং এটি স্থায়ীভাবে মোছার পরিবর্তে 20 টিরও কম আইটেম থাকে পাইথন এটিকে একটি বিনামূল্যে তালিকায় নিয়ে যায়।
একটি নিখরচায় 20 টি গ্রুপে বিভক্ত, যেখানে প্রতিটি গ্রুপ 0 এবং 20 এর মধ্যে দৈর্ঘ্যের n এর টিপলগুলির একটি তালিকা উপস্থাপন করে Each প্রথম (শূন্য) গ্রুপে কেবলমাত্র 1 টি উপাদান রয়েছে এবং একটি খালি টিউপল উপস্থাপন করে।
>>> a = (1,2,3)
>>> id(a)
4427578104
>>> del a
>>> b = (1,2,4)
>>> id(b)
4427578104
উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে a এবং b এর একই আইডি রয়েছে। এর কারণ আমরা অবিলম্বে একটি ধ্বংস হওয়া টুপল দখল করেছি যা ফ্রি তালিকায় ছিল।
তালিকা জন্য বরাদ্দ অপ্টিমাইজেশন
যেহেতু তালিকাগুলি সংশোধন করা যেতে পারে তাই পাইথন টিপলসের মতো একই অপটিমাইজেশন ব্যবহার করে না। তবে পাইথন তালিকাগুলিতেও একটি নিখরচায় তালিকা রয়েছে তবে এটি কেবল খালি বস্তুর জন্য ব্যবহৃত হয়। যদি কোনও খালি তালিকা মুছলে বা জিসির দ্বারা সংগ্রহ করা হয়, এটি পরে পুনরায় ব্যবহার করা যেতে পারে।
>>> a = []
>>> id(a)
4465566792
>>> del a
>>> b = []
>>> id(b)
4465566792
সূত্র: https://rushter.com/blog/python-lists-and-tuples/
টিপলগুলি তালিকার চেয়ে দক্ষ কেন? -> https://stackoverflow.com/a/22140115
5.3 নথি থেকে একটি দিকের উদ্ধৃতি । টিপলস এবং সিকোয়েন্সস :
যদিও টিপলগুলি তালিকার সাথে সাদৃশ্যপূর্ণ বলে মনে হয় তবে এগুলি প্রায়শই বিভিন্ন পরিস্থিতিতে এবং বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। Tuples হয় অপরিবর্তনীয় , এবং সাধারণত একটি ধারণ ভিন্নধর্মী ক্রম উপাদান মাধ্যমে ব্যবহার করা হয় যে unpacking (এই বিভাগে পরে দেখা হবে) অথবা ইন্ডেক্স (অথবা এমনকি namedtuples ক্ষেত্রে অ্যাট্রিবিউট দ্বারা)। তালিকাগুলি পরিবর্তনীয় এবং এগুলির উপাদানগুলি সাধারণত একজাতীয় থাকে এবং তালিকাটি পুনরাবৃত্তি করে অ্যাক্সেস করা হয় ।
প্রথমত, তারা উভয়ই পাইথনের নন-স্কেলার অবজেক্ট (যাকে যৌগিক বস্তু হিসাবেও পরিচিত)।
+
(একেবারে নতুন টিপল তৈরি করা হবে)(3,) # -> (3)
পরিবর্তে সিঙ্গলটন(3) # -> 3
[3]
new_array = origin_array[:]
[x**2 for x in range(1,7)]
আপনাকে দেয়
[1,4,9,16,25,36]
(পাঠযোগ্য নয়)তালিকা ব্যবহারের ফলে অ্যালিয়াসিং বাগও হতে পারে (একই জিনিসকে নির্দেশ করে দুটি স্বতন্ত্র পাথ)।
তালিকাগুলি পরিবর্তনীয় এবং টিপলগুলি অপরিবর্তনীয়। শুধু এই উদাহরণ বিবেচনা করুন।
a = ["1", "2", "ra", "sa"] #list
b = ("1", "2", "ra", "sa") #tuple
এখন তালিকা এবং টিপল এর সূচক মান পরিবর্তন করুন।
a[2] = 1000
print a #output : ['1', '2', 1000, 'sa']
b[2] = 1000
print b #output : TypeError: 'tuple' object does not support item assignment.
সুতরাং প্রমাণিত হয়েছে যে নীচের কোডটি টিপল সহ অবৈধ, কারণ আমরা একটি টুপল আপডেট করার চেষ্টা করেছি, যা অনুমোদিত নয়।
তালিকাটি পরিবর্তনীয় এবং টিপলগুলি অপরিবর্তনীয়। পরিবর্তনযোগ্য এবং অপরিবর্তনীয় মধ্যে প্রধান পার্থক্য হ'ল মেমরির ব্যবহার যখন আপনি কোনও আইটেম যুক্ত করার চেষ্টা করছেন।
আপনি যখন একটি ভেরিয়েবল তৈরি করেন, কিছু স্থির মেমরি ভেরিয়েবলের জন্য বরাদ্দ করা হয়। যদি এটি একটি তালিকা হয় তবে প্রকৃতপক্ষে ব্যবহৃত চেয়ে বেশি মেমরি বরাদ্দ করা হয় assigned উদাহরণস্বরূপ, যদি বর্তমান মেমরি অ্যাসাইনমেন্টটি 100 বাইট হয়, আপনি যখন 101 তম বাইট যুক্ত করতে চান, তখন আরও 100 বাইট নির্ধারিত হবে (এক্ষেত্রে মোট 200 বাইট)।
তবে, আপনি যদি জানেন যে আপনি প্রায়শই নতুন উপাদান যুক্ত করছেন না, তবে আপনার টিউপস ব্যবহার করা উচিত। টিপলস প্রয়োজনীয় মেমরির হুবহু আকার নির্ধারণ করে এবং তাই মেমরিটি সংরক্ষণ করে, বিশেষত যখন আপনি মেমরির বৃহত ব্লক ব্যবহার করেন।