Найменшенький<p>Як же мене після <code>C++</code> навіть на <code>Python</code> тягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.</p><p>Обʼєкт типу <code>object</code> займає <strong><code>16 BYTES</code></strong>. Це можна дізнатись викликавши метод <code>__sizeof__</code> в обʼєкта.</p><pre><code>o = object()
o.__sizeof__()
</code></pre><p>Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції <code>issubclass</code> яка приймає два типи та повертає значення типу <code>bool</code>.</p><pre><code>>>> issubclass(int, object)
True
>>> issubclass(float, object)
True
>>> issubclass(bool, object)
True
>>> issubclass(str, object)
True
>>> issubclass(list, object)
True
>>> issubclass(tuple, object)
True
>>> class A:
... pass
...
>>> issubclass(A, object)
True
</code></pre><p>Саме через це всі обʼєкти мають функцію <code>__sizeof__</code> і не тільки.</p><p>Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.</p><pre><code>>>> int().__sizeof__()
28
>>> float().__sizeof__()
24
>>> bool().__sizeof__()
28
>>> str().__sizeof__()
49
>>> tuple().__sizeof__()
24
>>> list().__sizeof__()
40
>>> set().__sizeof__()
200
>>> dict().__sizeof__()
48
</code></pre><p>Найбільше я здивувався розміру типу <code>bool</code>. Він займає скільки ж як і <code>int</code>, і є більшим за <code>float</code> та <code>tuple</code>. І це все розміри порожніх (нульових) обʼєктів.</p> <p>Тепер порівняємо кортежі та списками з однаковим вмістом.</p><pre><code>>>> t = (1,2,3,4,5,6)
>>> l = [1,2,3,4,5,6]
>>> t.__sizeof__()
72
>>> l.__sizeof__()
88
</code></pre><p>Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.</p><pre><code>>>> id(t[0]) == id(l[0])
True
>>> t[0] is l[0]
True
</code></pre><p>Оператор <code>is</code> робить те саме, він порівнює ідентифікатори.</p> <p>Це добре що <code>python</code> оптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови як <code>python</code>, <code>js</code>...</p><p><a class="hashtag" href="https://social.net.ua/tag/програмування" rel="nofollow noopener" target="_blank">#програмування</a> <a class="hashtag" href="https://social.net.ua/tag/python" rel="nofollow noopener" target="_blank">#python</a> <a class="hashtag" href="https://social.net.ua/tag/sizeof" rel="nofollow noopener" target="_blank">#sizeof</a> <a class="hashtag" href="https://social.net.ua/tag/розміри" rel="nofollow noopener" target="_blank">#розміри</a> <a class="hashtag" href="https://social.net.ua/tag/типи" rel="nofollow noopener" target="_blank">#типи</a> <a class="hashtag" href="https://social.net.ua/tag/int" rel="nofollow noopener" target="_blank">#int</a> <a class="hashtag" href="https://social.net.ua/tag/float" rel="nofollow noopener" target="_blank">#float</a> <a class="hashtag" href="https://social.net.ua/tag/list" rel="nofollow noopener" target="_blank">#list</a> <a class="hashtag" href="https://social.net.ua/tag/tuple" rel="nofollow noopener" target="_blank">#tuple</a> <a class="hashtag" href="https://social.net.ua/tag/списки" rel="nofollow noopener" target="_blank">#списки</a> <a class="hashtag" href="https://social.net.ua/tag/кортежі" rel="nofollow noopener" target="_blank">#кортежі</a> #<strong>sizeof</strong> <a class="hashtag" href="https://social.net.ua/tag/object" rel="nofollow noopener" target="_blank">#object</a> <a class="hashtag" href="https://social.net.ua/tag/оптимізація" rel="nofollow noopener" target="_blank">#оптимізація</a> <a class="hashtag" href="https://social.net.ua/tag/бісить" rel="nofollow noopener" target="_blank">#бісить</a></p>