কিছু কেসে ডিকশনারি বাদ দিয়ে অন্য ডেটা স্ট্রাকচার ব্যবহার করলে মেমরি বাঁচানো যায়।
১. কন্টিনিউয়াস ইন্টিজার কী → লিস্ট ব্যবহার করুন
# খারাপ: ডিক্ট
d = {0: 'a', 1: 'b', 2: 'c', ...}
# ভালো: লিস্ট
lst = ['a', 'b', 'c', ...] # O(1) অ্যাক্সেস, কম মেমরি
২. স্ট্রিং-ভিত্তিক কী → ট্রাই (Trie) ব্যবহার করুন
Trie Data Structure স্ট্রিং কী স্টোরেজের জন্য মেমরি-এফিশিয়েন্ট। পাইথনে datrie বা marisa-trie লাইব্রেরি আছে।
৩. __slots__ ব্যবহার করুন (কাস্টম ক্লাসে)
class MyClass:
__slots__ = ['x', 'y', 'z'] # __dict__ বানাবে না, মেমরি বাঁচায়
৪. নেমডটাপল (NamedTuple) বা ডেটাক্লাস
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y']) # ইমিউটেবল, লাইটওয়েট
৫. ডিকশনারি এড়ানো যাবে না সেখানে
অনেক জায়গায় ডিকশনারি ইচ্ছামতো অপ্টিমাল। পাইথনের ডিক্ট হলো সিম্পল হ্যাশ টেবিল ইমপ্লিমেন্টেশন — জাভা, সি++, রাস্ট সবাই একই প্যাটার্ন ফলো করে।
প্রোফাইলিং: tracemalloc বা objgraph ব্যবহার করে আসল বটলनेक খুঁজুন।