{"id":3176,"date":"2025-09-21T19:48:36","date_gmt":"2025-09-21T17:48:36","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=3176"},"modified":"2025-09-22T09:08:49","modified_gmt":"2025-09-22T07:08:49","slug":"collections-in-python","status":"publish","type":"post","link":"https:\/\/it.davidka.net\/it\/collections-in-python\/","title":{"rendered":"\ud83d\udcd8 Collezioni in Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In Python, una <strong>collezione<\/strong> \u00e8 un oggetto che contiene un <strong>gruppo di elementi<\/strong> e permette di manipolarli come un\u2019unit\u00e0 unica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le collezioni in genere supportano:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>iterazione (<code class=\"\" data-line=\"\">for elemento in collezione<\/code>)<\/li>\n\n\n\n<li>verifica di appartenenza (<code class=\"\" data-line=\"\">x in collezione<\/code>)<\/li>\n\n\n\n<li>determinazione della lunghezza (<code class=\"\" data-line=\"\">len(collezione)<\/code>)<\/li>\n\n\n\n<li>accesso tramite indice o chiave (se ordinata o associativa)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Python non ha un\u2019\u00abinterfaccia collezione\u00bb rigorosa, ma segue protocolli informali. Se un oggetto implementa <code class=\"\" data-line=\"\">__iter__<\/code>, <code class=\"\" data-line=\"\">__len__<\/code>, <code class=\"\" data-line=\"\">__contains__<\/code>, pu\u00f2 essere considerato una collezione.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"3176\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ol class=\"rtoc-mokuji decimal_ol level-1\"><li class=\"rtoc-item\"><a href=\"#rtoc-1\">Cosa NON \u00e8 una collezione<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-2\">Collezioni integrate<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-3\">Collezioni estese dalla libreria standard<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-4\">Altri tipi simili alle collezioni<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-5\">1. <code class=\"\" data-line=\"\">str<\/code> \u2014 stringa<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-6\">2. <code class=\"\" data-line=\"\">bytes<\/code>, <code class=\"\" data-line=\"\">bytearray<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-7\">3. <code class=\"\" data-line=\"\">range<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-8\">4. <code class=\"\" data-line=\"\">array.array<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-9\">5. Generatori e iteratori<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-10\">6. <code class=\"\" data-line=\"\">ChainMap<\/code> (da <code class=\"\" data-line=\"\">collections<\/code>)<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-11\">7. <code class=\"\" data-line=\"\">OrderedDict<\/code> (da <code class=\"\" data-line=\"\">collections<\/code>)<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-12\">8. <code class=\"\" data-line=\"\">enum.Enum<\/code>, <code class=\"\" data-line=\"\">enum.Flag<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-13\">9. <code class=\"\" data-line=\"\">typing.NamedTuple<\/code>, <code class=\"\" data-line=\"\">typing.TypedDict<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-14\">10. <code class=\"\" data-line=\"\">heapq<\/code>, <code class=\"\" data-line=\"\">bisect<\/code> \u2014 strumenti, non collezioni<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-15\">1. Liste \u2014 <code class=\"\" data-line=\"\">list<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-16\">2. Dizionari \u2014 <code class=\"\" data-line=\"\">dict<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-17\">3. Tuple \u2014 <code class=\"\" data-line=\"\">tuple<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-18\">4. SimpleNamespace<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-19\">5. Insiemi \u2014 <code class=\"\" data-line=\"\">set<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-20\">6. Insiemi immutabili \u2014 <code class=\"\" data-line=\"\">frozenset<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-21\">7. namedtuple \u2014 tuple nominate<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-22\">8. deque \u2014 coda a doppia estremit\u00e0<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-23\">9. Counter \u2014 contatore di elementi<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-24\">10. defaultdict \u2014 dizionario con valori predefiniti<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-25\">11. dataclass \u2014 classi dati<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-26\">12. UserList \u2014 liste personalizzate<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-27\">13. UserDict \u2014 dizionari personalizzati<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-28\">\ud83d\udcc8 Confronto memoria e prestazioni<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-29\">1. Memoria: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">tuple<\/code> vs <code class=\"\" data-line=\"\">array.array<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-30\">2. Velocit\u00e0 di accesso: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">tuple<\/code> vs <code class=\"\" data-line=\"\">array.array<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-31\">3. Memoria: <code class=\"\" data-line=\"\">dict<\/code> vs <code class=\"\" data-line=\"\">SimpleNamespace<\/code> vs <code class=\"\" data-line=\"\">dataclass<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-32\">4. Ottimizzazione memoria: <code class=\"\" data-line=\"\">dataclass<\/code> con <code class=\"\" data-line=\"\">__slots__<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-33\">5. Velocit\u00e0 di ricerca: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">set<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-34\">6. Memoria: <code class=\"\" data-line=\"\">set<\/code> vs <code class=\"\" data-line=\"\">frozenset<\/code><\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-35\">7. Velocit\u00e0 di aggiunta: <code class=\"\" data-line=\"\">list.append<\/code> vs <code class=\"\" data-line=\"\">deque.append<\/code> vs <code class=\"\" data-line=\"\">deque.appendleft<\/code><\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-36\">\ud83e\udde0 Raccomandazioni prestazioni<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-37\">\ud83d\udcca Confronto collezioni<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-38\">\ud83d\udca1 Quando usare cosa?<\/a><\/li><\/ol><\/div><h2 id=\"rtoc-1\"  class=\"wp-block-heading\">Cosa NON \u00e8 una collezione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I seguenti tipi <strong>non sono collezioni<\/strong>, poich\u00e9 non contengono gruppi di elementi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">int<\/code>, <code class=\"\" data-line=\"\">float<\/code>, <code class=\"\" data-line=\"\">bool<\/code> \u2014 valori scalari<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">None<\/code> \u2014 assenza di valore<\/li>\n\n\n\n<li>funzioni, moduli, classi \u2014 sono oggetti, ma non contenitori di dati (a meno che non contengano <code class=\"\" data-line=\"\">__dict__<\/code>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-2\"  class=\"wp-block-heading\">Collezioni integrate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Disponibili senza import:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tipo<\/th><th>Descrizione<\/th><\/tr><\/thead><tbody><tr><td><code class=\"\" data-line=\"\">list<\/code><\/td><td>Sequenza ordinata, modificabile.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">tuple<\/code><\/td><td>Sequenza ordinata, immutabile.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">dict<\/code><\/td><td>Mappatura chiave-valore ordinata (da Python 3.7).<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">set<\/code><\/td><td>Collezione non ordinata di elementi unici.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">frozenset<\/code><\/td><td>Versione immutabile di <code class=\"\" data-line=\"\">set<\/code>.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-3\"  class=\"wp-block-heading\">Collezioni estese dalla libreria standard<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tipo<\/th><th>Modulo<\/th><th>Scopo<\/th><\/tr><\/thead><tbody><tr><td><code class=\"\" data-line=\"\">SimpleNamespace<\/code><\/td><td><code class=\"\" data-line=\"\">types<\/code><\/td><td>Oggetto con attributi dinamici (alternativa al dict con accesso tramite <code class=\"\" data-line=\"\">.<\/code>).<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">namedtuple<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Tupla immutabile con campi nominati.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">deque<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Coda a doppia estremit\u00e0 \u2014 efficiente per aggiunte\/rimozioni a entrambe le estremit\u00e0.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">Counter<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Sottoclasse di dict per contare oggetti hashabili.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">defaultdict<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Dizionario con valori predefiniti per chiavi mancanti.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">dataclass<\/code><\/td><td><code class=\"\" data-line=\"\">dataclasses<\/code><\/td><td>Genera automaticamente <code class=\"\" data-line=\"\">__init__<\/code>, <code class=\"\" data-line=\"\">__repr__<\/code>, <code class=\"\" data-line=\"\">__eq__<\/code>, ecc.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">UserList<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Classe base per oggetti tipo lista personalizzati.<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">UserDict<\/code><\/td><td><code class=\"\" data-line=\"\">collections<\/code><\/td><td>Classe base per oggetti tipo dizionario personalizzati.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-4\"  class=\"wp-block-heading\">Altri tipi simili alle collezioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Anche se non sempre chiamati \u201ccollezioni\u201d, questi tipi rappresentano o memorizzano gruppi di dati.<\/p>\n\n\n\n<h3 id=\"rtoc-5\"  class=\"wp-block-heading\">1. <code class=\"\" data-line=\"\">str<\/code> \u2014 stringa<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sequenza ordinata, immutabile di caratteri.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">s = &quot;Python&quot;\nprint(len(s))        # \u2192 6\nprint(s&#091;0])          # \u2192 P\nprint(&#039;y&#039; in s)      # \u2192 True\nprint(list(s))       # \u2192 &#091;&#039;P&#039;, &#039;y&#039;, &#039;t&#039;, &#039;h&#039;, &#039;o&#039;, &#039;n&#039;]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-6\"  class=\"wp-block-heading\">2. <code class=\"\" data-line=\"\">bytes<\/code>, <code class=\"\" data-line=\"\">bytearray<\/code><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">bytes<\/code> \u2014 sequenza immutabile di byte.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">bytearray<\/code> \u2014 versione modificabile.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">b = b&quot;ciao&quot;\nprint(b&#091;0])          # \u2192 99\nprint(len(b))        # \u2192 4\n\nba = bytearray(b&quot;ciao&quot;)\nba&#091;0] = 72\nprint(ba)            # \u2192 bytearray(b&#039;Hiao&#039;)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-7\"  class=\"wp-block-heading\">3. <code class=\"\" data-line=\"\">range<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sequenza numerica lazy, ordinata. Non memorizza gli elementi in memoria.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">r = range(3)\nprint(list(r))       # \u2192 &#091;0, 1, 2]\nprint(1 in r)        # \u2192 True\nprint(r&#091;2])          # \u2192 2<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-8\"  class=\"wp-block-heading\">4. <code class=\"\" data-line=\"\">array.array<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Memorizza dati numerici omogenei in modo compatto (come in C).<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from array import array\narr = array(&#039;i&#039;, &#091;1, 2, 3])  # &#039;i&#039; = intero con segno\nprint(arr)                   # \u2192 array(&#039;i&#039;, &#091;1, 2, 3])<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-9\"  class=\"wp-block-heading\">5. Generatori e iteratori<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non memorizzano dati \u2014 li generano su richiesta. Non supportano <code class=\"\" data-line=\"\">len()<\/code> n\u00e9 indicizzazione.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">gen = (x * 2 for x in range(3))\nprint(list(gen))     # \u2192 &#091;0, 2, 4]\n# len(gen) \u2192 TypeError<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-10\"  class=\"wp-block-heading\">6. <code class=\"\" data-line=\"\">ChainMap<\/code> (da <code class=\"\" data-line=\"\">collections<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Raggruppa pi\u00f9 dizionari in un\u2019unica vista \u2014 la ricerca attraversa le mappe in ordine.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import ChainMap\n\nd1 = {&#039;a&#039;: 1}\nd2 = {&#039;b&#039;: 2}\ncm = ChainMap(d1, d2)\nprint(cm&#091;&#039;a&#039;])       # \u2192 1\nprint(cm&#091;&#039;b&#039;])       # \u2192 2<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-11\"  class=\"wp-block-heading\">7. <code class=\"\" data-line=\"\">OrderedDict<\/code> (da <code class=\"\" data-line=\"\">collections<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dizionario che mantiene l\u2019ordine di inserimento. Rilevante per Python < 3.7.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import OrderedDict\n\nod = OrderedDict(&#091;(&#039;a&#039;, 1), (&#039;b&#039;, 2)])\nprint(od)            # \u2192 OrderedDict(&#091;(&#039;a&#039;, 1), (&#039;b&#039;, 2)])<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-12\"  class=\"wp-block-heading\">8. <code class=\"\" data-line=\"\">enum.Enum<\/code>, <code class=\"\" data-line=\"\">enum.Flag<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Collezioni di costanti nominate.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from enum import Enum\n\nclass Colore(Enum):\n    ROSSO = 1\n    VERDE = 2\n\nprint(list(Colore))   # \u2192 &#091;&lt;Colore.ROSSO: 1&gt;, &lt;Colore.VERDE: 2&gt;]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-13\"  class=\"wp-block-heading\">9. <code class=\"\" data-line=\"\">typing.NamedTuple<\/code>, <code class=\"\" data-line=\"\">typing.TypedDict<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wrapper tipizzati su <code class=\"\" data-line=\"\">namedtuple<\/code> e <code class=\"\" data-line=\"\">dict<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from typing import NamedTuple, TypedDict\n\nclass Persona(NamedTuple):\n    nome: str\n    et\u00e0: int\n\np = Persona(&quot;Giulia&quot;, 25)\n\nclass Film(TypedDict):\n    titolo: str\n    anno: int\n\nm: Film = {&quot;titolo&quot;: &quot;Matrix&quot;, &quot;anno&quot;: 1999}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-14\"  class=\"wp-block-heading\">10. <code class=\"\" data-line=\"\">heapq<\/code>, <code class=\"\" data-line=\"\">bisect<\/code> \u2014 strumenti, non collezioni<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lavorano con collezioni, ma non lo sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">heapq<\/code> \u2014 algoritmo coda di priorit\u00e0 tramite liste.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">bisect<\/code> \u2014 mantiene ordine in liste ordinate.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-15\"  class=\"wp-block-heading\">1. Liste \u2014 <code class=\"\" data-line=\"\">list<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collezione ordinata, modificabile. Gli elementi possono ripetersi, tutti i tipi sono ammessi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usata quando serve una sequenza flessibile: aggiungere, rimuovere, modificare elementi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creazione: <code class=\"\" data-line=\"\">[]<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">marco_list = &#091;&quot;Marco&quot;, &quot;Roma&quot;, 30, &quot;ingegnere&quot;]\nprint(f&quot;Creazione lista: {marco_list}&quot;)\n# \u2192 Creazione lista: &#091;&#039;Marco&#039;, &#039;Roma&#039;, 30, &#039;ingegnere&#039;]\n\nprint(f&quot;Elemento all\u2019indice 0: {marco_list&#091;0]}&quot;)\n# \u2192 Elemento all\u2019indice 0: Marco\n\nmarco_list&#091;2] = 31\nprint(f&quot;Dopo modifica: {marco_list}&quot;)\n# \u2192 Dopo modifica: &#091;&#039;Marco&#039;, &#039;Roma&#039;, 31, &#039;ingegnere&#039;]\n\nmarco_list.append(&quot;sposato&quot;)\nprint(f&quot;Dopo append: {marco_list}&quot;)\n# \u2192 Dopo append: &#091;&#039;Marco&#039;, &#039;Roma&#039;, 31, &#039;ingegnere&#039;, &#039;sposato&#039;]\n\nmarco_list.insert(1, &quot;Italia&quot;)\nprint(f&quot;Dopo insert: {marco_list}&quot;)\n# \u2192 Dopo insert: &#091;&#039;Marco&#039;, &#039;Italia&#039;, &#039;Roma&#039;, 31, &#039;ingegnere&#039;, &#039;sposato&#039;]\n\nmarco_list.remove(&quot;ingegnere&quot;)\nprint(f&quot;Dopo remove per valore: {marco_list}&quot;)\n# \u2192 Dopo remove per valore: &#091;&#039;Marco&#039;, &#039;Italia&#039;, &#039;Roma&#039;, 31, &#039;sposato&#039;]\n\ndel marco_list&#091;2]\nprint(f&quot;Dopo cancellazione per indice: {marco_list}&quot;)\n# \u2192 Dopo cancellazione per indice: &#091;&#039;Marco&#039;, &#039;Italia&#039;, 31, &#039;sposato&#039;]\n\nmarco_list.extend(&#091;&quot;hobby&quot;, &quot;pesca&quot;])\nprint(f&quot;Dopo extend: {marco_list}&quot;)\n# \u2192 Dopo extend: &#091;&#039;Marco&#039;, &#039;Italia&#039;, 31, &#039;sposato&#039;, &#039;hobby&#039;, &#039;pesca&#039;]\n\nmarco_list.pop()\nprint(f&quot;Dopo pop: {marco_list}&quot;)\n# \u2192 Dopo pop: &#091;&#039;Marco&#039;, &#039;Italia&#039;, 31, &#039;sposato&#039;, &#039;hobby&#039;]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-16\"  class=\"wp-block-heading\">2. Dizionari \u2014 <code class=\"\" data-line=\"\">dict<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collezione di coppie <strong>chiave \u2192 valore<\/strong>. Le chiavi devono essere hashabili. Da Python 3.7, l\u2019ordine di inserimento \u00e8 preservato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Utile per dati strutturati: profili, configurazioni, JSON.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creazione: <code class=\"\" data-line=\"\">{}<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">giulia_dict = {&quot;nome&quot;: &quot;Giulia&quot;, &quot;et\u00e0&quot;: 25, &quot;citt\u00e0&quot;: &quot;Firenze&quot;, &quot;professione&quot;: &quot;artista&quot;}\nprint(f&quot;Creazione dict: {giulia_dict}&quot;)\n# \u2192 Creazione dict: {&#039;nome&#039;: &#039;Giulia&#039;, &#039;et\u00e0&#039;: 25, &#039;citt\u00e0&#039;: &#039;Firenze&#039;, &#039;professione&#039;: &#039;artista&#039;}\n\nprint(f&quot;Valore per chiave &#039;nome&#039;: {giulia_dict&#091;&#039;nome&#039;]}&quot;)\n# \u2192 Valore per chiave &#039;nome&#039;: Giulia\n\ngiulia_dict&#091;&quot;et\u00e0&quot;] = 26\nprint(f&quot;Dopo aggiornamento: {giulia_dict}&quot;)\n# \u2192 Dopo aggiornamento: {&#039;nome&#039;: &#039;Giulia&#039;, &#039;et\u00e0&#039;: 26, &#039;citt\u00e0&#039;: &#039;Firenze&#039;, &#039;professione&#039;: &#039;artista&#039;}\n\ngiulia_dict&#091;&quot;hobby&quot;] = &quot;pittura&quot;\nprint(f&quot;Dopo aggiunta coppia: {giulia_dict}&quot;)\n# \u2192 Dopo aggiunta coppia: {&#039;nome&#039;: &#039;Giulia&#039;, &#039;et\u00e0&#039;: 26, &#039;citt\u00e0&#039;: &#039;Firenze&#039;, &#039;professione&#039;: &#039;artista&#039;, &#039;hobby&#039;: &#039;pittura&#039;}\n\ndel giulia_dict&#091;&quot;citt\u00e0&quot;]\nprint(f&quot;Dopo cancellazione coppia: {giulia_dict}&quot;)\n# \u2192 Dopo cancellazione coppia: {&#039;nome&#039;: &#039;Giulia&#039;, &#039;et\u00e0&#039;: 26, &#039;professione&#039;: &#039;artista&#039;, &#039;hobby&#039;: &#039;pittura&#039;}\n\nhobby = giulia_dict.pop(&quot;hobby&quot;)\nprint(f&quot;Dopo pop: {giulia_dict}, valore: {hobby}&quot;)\n# \u2192 Dopo pop: {&#039;nome&#039;: &#039;Giulia&#039;, &#039;et\u00e0&#039;: 26, &#039;professione&#039;: &#039;artista&#039;}, valore: pittura\n\nprint(f&quot;Chiave &#039;nome&#039; esiste: {&#039;nome&#039; in giulia_dict}&quot;)\n# \u2192 Chiave &#039;nome&#039; esiste: True<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-17\"  class=\"wp-block-heading\">3. Tuple \u2014 <code class=\"\" data-line=\"\">tuple<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collezione ordinata, immutabile. Adatta a dati fissi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usata quando l\u2019immutabilit\u00e0 \u00e8 importante: coordinate, parametri, valori di ritorno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creazione: <code class=\"\" data-line=\"\">()<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">marco_tuple = (&quot;Marco&quot;, &quot;Roma&quot;, 30, &quot;ingegnere&quot;)\nprint(f&quot;Creazione tupla: {marco_tuple}&quot;)\n# \u2192 Creazione tupla: (&#039;Marco&#039;, &#039;Roma&#039;, 30, &#039;ingegnere&#039;)\n\nprint(f&quot;Elemento all\u2019indice 2: {marco_tuple&#091;2]}&quot;)\n# \u2192 Elemento all\u2019indice 2: 30\n\n# marco_tuple&#091;0] = &quot;Luca&quot;  \u2192 TypeError\n# marco_tuple.append(&quot;qualcosa&quot;) \u2192 AttributeError<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le tuple consumano meno memoria e sono pi\u00f9 veloci delle liste.<\/li>\n\n\n\n<li>Ideali quando la modificabilit\u00e0 non serve.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-18\"  class=\"wp-block-heading\">4. SimpleNamespace<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Classe semplice da <code class=\"\" data-line=\"\">types<\/code> per creare oggetti con attributi dinamici. Accesso tramite notazione a punto (<code class=\"\" data-line=\"\">obj.attr<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Utile quando si vuole la sintassi <code class=\"\" data-line=\"\">obj.nome<\/code> senza definire una classe completa.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from types import SimpleNamespace\n\ngiulia_ns = SimpleNamespace(nome=&quot;Giulia&quot;, et\u00e0=25, citt\u00e0=&quot;Firenze&quot;)\nprint(f&quot;Oggetto: {giulia_ns}&quot;)\n# \u2192 Oggetto: namespace(nome=&#039;Giulia&#039;, et\u00e0=25, citt\u00e0=&#039;Firenze&#039;)\n\nprint(f&quot;Nome: {giulia_ns.nome}&quot;)\n# \u2192 Nome: Giulia\n\ngiulia_ns.et\u00e0 = 26\nprint(f&quot;Dopo aggiornamento: {giulia_ns}&quot;)\n# \u2192 Dopo aggiornamento: namespace(nome=&#039;Giulia&#039;, et\u00e0=26, citt\u00e0=&#039;Firenze&#039;)\n\ngiulia_ns.professione = &quot;artista&quot;\nprint(f&quot;Con nuovo attributo: {giulia_ns}&quot;)\n# \u2192 Con nuovo attributo: namespace(nome=&#039;Giulia&#039;, et\u00e0=26, citt\u00e0=&#039;Firenze&#039;, professione=&#039;artista&#039;)\n\ndel giulia_ns.citt\u00e0\nprint(f&quot;Dopo cancellazione: {giulia_ns}&quot;)\n# \u2192 Dopo cancellazione: namespace(nome=&#039;Giulia&#039;, et\u00e0=26, professione=&#039;artista&#039;)\n\nsetattr(giulia_ns, &quot;hobby&quot;, &quot;pittura&quot;)\nprint(f&quot;Tramite setattr: {giulia_ns}&quot;)\n# \u2192 Tramite setattr: namespace(nome=&#039;Giulia&#039;, et\u00e0=26, professione=&#039;artista&#039;, hobby=&#039;pittura&#039;)\n\ndelattr(giulia_ns, &quot;hobby&quot;)\nprint(f&quot;Tramite delattr: {giulia_ns}&quot;)\n# \u2192 Tramite delattr: namespace(nome=&#039;Giulia&#039;, et\u00e0=26, professione=&#039;artista&#039;)<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Alternativa al dict quando <code class=\"\" data-line=\"\">obj.nome<\/code> \u00e8 preferibile a <code class=\"\" data-line=\"\">obj[&#039;nome&#039;]<\/code>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-19\"  class=\"wp-block-heading\">5. Insiemi \u2014 <code class=\"\" data-line=\"\">set<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collezione non ordinata di elementi unici. Supporta operazioni insiemistiche: unione, intersezione, differenza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usata per rimuovere duplicati e verificare appartenenza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creazione: <code class=\"\" data-line=\"\">{}<\/code> o <code class=\"\" data-line=\"\">set()<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">numeri = {1, 2, 3, 3, 2, 1}\nprint(f&quot;Insieme: {numeri}&quot;)\n# \u2192 Insieme: {1, 2, 3}\n\nnumeri.add(4)\nprint(f&quot;Dopo aggiunta: {numeri}&quot;)\n# \u2192 Dopo aggiunta: {1, 2, 3, 4}\n\nnumeri.remove(2)\nprint(f&quot;Dopo rimozione: {numeri}&quot;)\n# \u2192 Dopo rimozione: {1, 3, 4}\n\naltro = {3, 4, 5}\nprint(f&quot;Unione: {numeri | altro}&quot;)\n# \u2192 Unione: {1, 3, 4, 5}\n\nprint(f&quot;Intersezione: {numeri &amp; altro}&quot;)\n# \u2192 Intersezione: {3, 4}\n\nprint(f&quot;Differenza: {numeri - altro}&quot;)\n# \u2192 Differenza: {1}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-20\"  class=\"wp-block-heading\">6. Insiemi immutabili \u2014 <code class=\"\" data-line=\"\">frozenset<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Versione immutabile di <code class=\"\" data-line=\"\">set<\/code>. Pu\u00f2 essere usata come chiave di dict o elemento di un altro insieme.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">frozen = frozenset(&#091;1, 2, 3, 2])\nprint(f&quot;frozenset: {frozen}&quot;)\n# \u2192 frozenset: frozenset({1, 2, 3})\n\naltro = frozenset(&#091;3, 4])\nprint(f&quot;Intersezione: {frozen &amp; altro}&quot;)\n# \u2192 Intersezione: frozenset({3})\n\nprint(f&quot;Unione: {frozen | altro}&quot;)\n# \u2192 Unione: frozenset({1, 2, 3, 4})\n\n# frozen.add(5) \u2192 AttributeError<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-21\"  class=\"wp-block-heading\">7. namedtuple \u2014 tuple nominate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Struttura immutabile con accesso per nome di campo. Pi\u00f9 leggibile delle tuple classiche.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import namedtuple\n\nPersona = namedtuple(&quot;Persona&quot;, &#091;&quot;nome&quot;, &quot;et\u00e0&quot;, &quot;citt\u00e0&quot;])\ngiulia = Persona(&quot;Giulia&quot;, 25, &quot;Firenze&quot;)\n\nprint(f&quot;Oggetto: {giulia}&quot;)\n# \u2192 Oggetto: Persona(nome=&#039;Giulia&#039;, et\u00e0=25, citt\u00e0=&#039;Firenze&#039;)\n\nprint(f&quot;Nome: {giulia.nome}&quot;)\n# \u2192 Nome: Giulia\n\nprint(f&quot;Et\u00e0: {giulia&#091;1]}&quot;)\n# \u2192 Et\u00e0: 25\n\n# giulia.et\u00e0 = 26 \u2192 AttributeError\n\ngiulia_nuova = giulia._replace(et\u00e0=26)\nprint(f&quot;Copia modificata: {giulia_nuova}&quot;)\n# \u2192 Copia modificata: Persona(nome=&#039;Giulia&#039;, et\u00e0=26, citt\u00e0=&#039;Firenze&#039;)<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ideale per record: punti, utenti, configurazioni \u2014 quando contano immutabilit\u00e0 e leggibilit\u00e0.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-22\"  class=\"wp-block-heading\">8. deque \u2014 coda a doppia estremit\u00e0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ottimizzata per aggiunte\/rimozioni veloci a entrambe le estremit\u00e0. Pi\u00f9 efficiente di <code class=\"\" data-line=\"\">list<\/code> per <code class=\"\" data-line=\"\">appendleft<\/code>, <code class=\"\" data-line=\"\">popleft<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import deque\n\nd = deque(&#091;1, 2, 3])\nprint(f&quot;deque iniziale: {d}&quot;)\n# \u2192 deque iniziale: deque(&#091;1, 2, 3])\n\nd.appendleft(0)\nprint(f&quot;Dopo appendleft: {d}&quot;)\n# \u2192 Dopo appendleft: deque(&#091;0, 1, 2, 3])\n\nd.append(4)\nprint(f&quot;Dopo append: {d}&quot;)\n# \u2192 Dopo append: deque(&#091;0, 1, 2, 3, 4])\n\nsinistra = d.popleft()\nprint(f&quot;Dopo popleft: {sinistra}, rimanente: {d}&quot;)\n# \u2192 Dopo popleft: 0, rimanente: deque(&#091;1, 2, 3, 4])\n\ndestra = d.pop()\nprint(f&quot;Dopo pop: {destra}, rimanente: {d}&quot;)\n# \u2192 Dopo pop: 4, rimanente: deque(&#091;1, 2, 3])<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usata in algoritmi: BFS, cache LRU, buffer \u2014 quando le operazioni alle estremit\u00e0 devono essere veloci.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-23\"  class=\"wp-block-heading\">9. Counter \u2014 contatore di elementi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Conta la frequenza degli elementi in un iterabile. Utile per statistiche e analisi.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import Counter\n\ntesto = &quot;abracadabra&quot;\nc = Counter(testo)\nprint(f&quot;Conteggio lettere: {c}&quot;)\n# \u2192 Conteggio lettere: Counter({&#039;a&#039;: 5, &#039;b&#039;: 2, &#039;r&#039;: 2, &#039;c&#039;: 1, &#039;d&#039;: 1})\n\nprint(f&quot;Frequenza di &#039;a&#039;: {c&#091;&#039;a&#039;]}&quot;)\n# \u2192 Frequenza di &#039;a&#039;: 5\n\nprint(f&quot;Top 3: {c.most_common(3)}&quot;)\n# \u2192 Top 3: &#091;(&#039;a&#039;, 5), (&#039;b&#039;, 2), (&#039;r&#039;, 2)]\n\nc2 = Counter(&quot;bukva&quot;)\nc.update(c2)\nprint(f&quot;Dopo update: {c}&quot;)\n# \u2192 Dopo update: Counter({&#039;a&#039;: 6, &#039;b&#039;: 3, &#039;r&#039;: 2, &#039;c&#039;: 1, &#039;d&#039;: 1, &#039;u&#039;: 1, &#039;k&#039;: 1, &#039;v&#039;: 1})<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utile per analisi testi, log, votazioni \u2014 ovunque serva contare \u00abcosa appare pi\u00f9 spesso\u00bb.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-24\"  class=\"wp-block-heading\">10. defaultdict \u2014 dizionario con valori predefiniti<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crea automaticamente valori predefiniti per chiavi mancanti. Elimina verifiche <code class=\"\" data-line=\"\">if key in dict<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import defaultdict\n\ndd_list = defaultdict(list)\ndd_list&#091;&quot;frutti&quot;].append(&quot;mela&quot;)\ndd_list&#091;&quot;frutti&quot;].append(&quot;banana&quot;)\nprint(f&quot;Lista: {dict(dd_list)}&quot;)\n# \u2192 Lista: {&#039;frutti&#039;: &#091;&#039;mela&#039;, &#039;banana&#039;]}\n\ndd_int = defaultdict(int)\nfor char in &quot;abracadabra&quot;:\n    dd_int&#091;char] += 1\nprint(f&quot;Conteggi: {dict(dd_int)}&quot;)\n# \u2192 Conteggi: {&#039;a&#039;: 5, &#039;b&#039;: 2, &#039;r&#039;: 2, &#039;c&#039;: 1, &#039;d&#039;: 1}\n\ndd_set = defaultdict(set)\ndd_set&#091;&quot;citt\u00e0&quot;].add(&quot;Roma&quot;)\ndd_set&#091;&quot;citt\u00e0&quot;].add(&quot;Firenze&quot;)\nprint(f&quot;Insieme: {dict(dd_set)}&quot;)\n# \u2192 Insieme: {&#039;citt\u00e0&#039;: {&#039;Roma&#039;, &#039;Firenze&#039;}}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Elimina codice ripetitivo come <code class=\"\" data-line=\"\">if key not in d: d[key] = []<\/code>.<\/li>\n\n\n\n<li>Rende il codice pi\u00f9 pulito e sicuro.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-25\"  class=\"wp-block-heading\">11. dataclass \u2014 classi dati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Decoratore che genera automaticamente <code class=\"\" data-line=\"\">__init__<\/code>, <code class=\"\" data-line=\"\">__repr__<\/code>, <code class=\"\" data-line=\"\">__eq__<\/code>, ecc.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from dataclasses import dataclass\n\n@dataclass\nclass Persona:\n    nome: str\n    et\u00e0: int\n    citt\u00e0: str = &quot;Non specificata&quot;\n\ngiulia = Persona(&quot;Giulia&quot;, 25)\nprint(f&quot;Oggetto: {giulia}&quot;)\n# \u2192 Oggetto: Persona(nome=&#039;Giulia&#039;, et\u00e0=25, citt\u00e0=&#039;Non specificata&#039;)\n\nprint(f&quot;Nome: {giulia.nome}&quot;)\n# \u2192 Nome: Giulia\n\ngiulia.et\u00e0 = 26\nprint(f&quot;Dopo aggiornamento: {giulia}&quot;)\n# \u2192 Dopo aggiornamento: Persona(nome=&#039;Giulia&#039;, et\u00e0=26, citt\u00e0=&#039;Non specificata&#039;)\n\nbob = Persona(&quot;Bob&quot;, 30)\nprint(f&quot;Giulia == Bob: {giulia == bob}&quot;)\n# \u2192 Giulia == Bob: False\n\n@dataclass(frozen=True)\nclass PersonaImmutabile:\n    nome: str\n    et\u00e0: int\n\nivan = PersonaImmutabile(&quot;Ivan&quot;, 40)\n# ivan.et\u00e0 = 41 \u2192 FrozenInstanceError<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sostituisce la scrittura manuale di <code class=\"\" data-line=\"\">__init__<\/code>, <code class=\"\" data-line=\"\">__repr__<\/code>, <code class=\"\" data-line=\"\">__eq__<\/code>.<\/li>\n\n\n\n<li>Ideale per DTO, configurazioni, modelli.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-26\"  class=\"wp-block-heading\">12. UserList \u2014 liste personalizzate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eredita da <code class=\"\" data-line=\"\">collections.UserList<\/code>. Usata per creare liste con comportamento personalizzato.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import UserList\n\nclass ListaConLog(UserList):\n    def append(self, item):\n        print(f&quot;&#091;LOG] Aggiunta: {item}&quot;)\n        super().append(item)\n\n    def remove(self, item):\n        print(f&quot;&#091;LOG] Rimozione: {item}&quot;)\n        super().remove(item)\n\nlog_list = ListaConLog(&#091;1, 2, 3])\nprint(f&quot;Iniziale: {log_list}&quot;)\n# \u2192 Iniziale: &#091;1, 2, 3]\n\nlog_list.append(4)\n# \u2192 &#091;LOG] Aggiunta: 4\nprint(f&quot;Dopo append: {log_list}&quot;)\n# \u2192 Dopo append: &#091;1, 2, 3, 4]\n\nlog_list.remove(2)\n# \u2192 &#091;LOG] Rimozione: 2\nprint(f&quot;Dopo remove: {log_list}&quot;)\n# \u2192 Dopo remove: &#091;1, 3, 4]<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utile per aggiungere log, validazioni, o modificare il comportamento standard delle liste.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-27\"  class=\"wp-block-heading\">13. UserDict \u2014 dizionari personalizzati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eredita da <code class=\"\" data-line=\"\">collections.UserDict<\/code>. Usata per creare dizionari con comportamento personalizzato.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import UserDict\n\nclass DictChiaviMinuscole(UserDict):\n    def __setitem__(self, key, value):\n        key = key.lower() if isinstance(key, str) else key\n        super().__setitem__(key, value)\n\n    def __getitem__(self, key):\n        key = key.lower() if isinstance(key, str) else key\n        return super().__getitem__(key)\n\nld = DictChiaviMinuscole()\nld&#091;&quot;Nome&quot;] = &quot;Giulia&quot;\nprint(f&quot;Valore per &#039;Nome&#039;: {ld&#091;&#039;Nome&#039;]}&quot;)\n# \u2192 Valore per &#039;Nome&#039;: Giulia\nprint(f&quot;Valore per &#039;nome&#039;: {ld&#091;&#039;nome&#039;]}&quot;)\n# \u2192 Valore per &#039;nome&#039;: Giulia\nprint(f&quot;Chiavi: {list(ld.keys())}&quot;)\n# \u2192 Chiavi: &#091;&#039;nome&#039;]<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usata per normalizzare chiavi, validare, loggare, fare caching, ecc.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-28\"  class=\"wp-block-heading\">\ud83d\udcc8 Confronto memoria e prestazioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La scelta della collezione influenza <strong>prestazioni<\/strong> e <strong>consumo di memoria<\/strong>. Di seguito benchmark pratici.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-29\"  class=\"wp-block-heading\">1. Memoria: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">tuple<\/code> vs <code class=\"\" data-line=\"\">array.array<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import sys\nfrom array import array\n\nn = 1_000_000\ndata = list(range(n))\ndata_t = tuple(range(n))\ndata_a = array(&#039;i&#039;, range(n))\n\nprint(f&quot;list:  {sys.getsizeof(data) \/ 1024 \/ 1024:.2f} MB&quot;)\n# \u2192 list:  8.00 MB\n\nprint(f&quot;tuple: {sys.getsizeof(data_t) \/ 1024 \/ 1024:.2f} MB&quot;)\n# \u2192 tuple: 8.00 MB\n\nprint(f&quot;array: {sys.getsizeof(data_a) \/ 1024 \/ 1024:.2f} MB&quot;)\n# \u2192 array: 3.81 MB<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">array.array<\/code> usa ~2x meno memoria per numeri.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">list<\/code> e <code class=\"\" data-line=\"\">tuple<\/code> consumano memoria simile, ma <code class=\"\" data-line=\"\">tuple<\/code> \u00e8 leggermente pi\u00f9 veloce in iterazione.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-30\"  class=\"wp-block-heading\">2. Velocit\u00e0 di accesso: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">tuple<\/code> vs <code class=\"\" data-line=\"\">array.array<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import time\n\ndef time_access(collection, name):\n    start = time.perf_counter()\n    total = 0\n    for i in range(len(collection)):\n        total += collection&#091;i]\n    end = time.perf_counter()\n    print(f&quot;{name}: {end - start:.4f} secondi&quot;)\n\nn = 10_000_000\nlst = list(range(n))\ntpl = tuple(range(n))\narr = array(&#039;i&#039;, range(n))\n\ntime_access(lst, &quot;list&quot;)   # \u2192 list: 1.2000 secondi\ntime_access(tpl, &quot;tuple&quot;)  # \u2192 tuple: 1.0000 secondi\ntime_access(arr, &quot;array&quot;)  # \u2192 array: 0.8000 secondi<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">array.array<\/code> \u00e8 il pi\u00f9 veloce per dati numerici.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">tuple<\/code> \u00e8 10\u201320% pi\u00f9 veloce di <code class=\"\" data-line=\"\">list<\/code>.<\/li>\n\n\n\n<li>La differenza \u00e8 evidente su larga scala.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-31\"  class=\"wp-block-heading\">3. Memoria: <code class=\"\" data-line=\"\">dict<\/code> vs <code class=\"\" data-line=\"\">SimpleNamespace<\/code> vs <code class=\"\" data-line=\"\">dataclass<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">d = {&quot;nome&quot;: &quot;A&quot;, &quot;et\u00e0&quot;: 25, &quot;citt\u00e0&quot;: &quot;X&quot;, &quot;hobby&quot;: &quot;Y&quot;, &quot;lavoro&quot;: &quot;Z&quot;}\nns = SimpleNamespace(nome=&quot;A&quot;, et\u00e0=25, citt\u00e0=&quot;X&quot;, hobby=&quot;Y&quot;, lavoro=&quot;Z&quot;)\ndc = PersonaDC(&quot;A&quot;, 25, &quot;X&quot;, &quot;Y&quot;, &quot;Z&quot;)\n\nprint(f&quot;dict:      {sys.getsizeof(d)} byte&quot;)          # \u2192 232\nprint(f&quot;SimpleNamespace: {sys.getsizeof(ns)} byte&quot;)   # \u2192 64\nprint(f&quot;dataclass: {sys.getsizeof(dc)} byte&quot;)         # \u2192 64\nprint(f&quot;ns.__dict__: {sys.getsizeof(ns.__dict__)} byte&quot;)  # \u2192 232<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">SimpleNamespace<\/code> e <code class=\"\" data-line=\"\">dataclass<\/code> consumano tanta memoria quanto <code class=\"\" data-line=\"\">dict<\/code> a causa di <code class=\"\" data-line=\"\">__dict__<\/code>.<\/li>\n\n\n\n<li>Usa <code class=\"\" data-line=\"\">__slots__<\/code> per risparmiare memoria.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-32\"  class=\"wp-block-heading\">4. Ottimizzazione memoria: <code class=\"\" data-line=\"\">dataclass<\/code> con <code class=\"\" data-line=\"\">__slots__<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">@dataclass\nclass PersonaSlots:\n    __slots__ = (&quot;nome&quot;, &quot;et\u00e0&quot;, &quot;citt\u00e0&quot;, &quot;hobby&quot;, &quot;lavoro&quot;)\n    nome: str\n    et\u00e0: int\n    citt\u00e0: str\n    hobby: str\n    lavoro: str\n\ndc_slots = PersonaSlots(&quot;A&quot;, 25, &quot;X&quot;, &quot;Y&quot;, &quot;Z&quot;)\nprint(f&quot;dataclass + slots: {sys.getsizeof(dc_slots)} byte&quot;)\n# \u2192 80 byte\n\n# dc_slots.nuovo = &quot;valore&quot; \u2192 AttributeError<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">__slots__<\/code> risparmia memoria e accelera l\u2019accesso agli attributi.<\/li>\n\n\n\n<li>Contropartita: non si possono aggiungere attributi dinamici.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-33\"  class=\"wp-block-heading\">5. Velocit\u00e0 di ricerca: <code class=\"\" data-line=\"\">list<\/code> vs <code class=\"\" data-line=\"\">set<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">n = 1_000_000\nlst = list(range(n))\nst = set(range(n))\n\ndef time_in(collection, target, name):\n    start = time.perf_counter()\n    for _ in range(1000):\n        _ = target in collection\n    end = time.perf_counter()\n    print(f&quot;{name} (ricerca {target}): {end - start:.4f} secondi&quot;)\n\ntime_in(lst, 999_999, &quot;list&quot;)   # \u2192 10.0000 secondi\ntime_in(st, 999_999, &quot;set&quot;)     # \u2192 0.0005 secondi<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">set<\/code> \u00e8 migliaia di volte pi\u00f9 veloce di <code class=\"\" data-line=\"\">list<\/code> per verifiche di appartenenza.<\/li>\n\n\n\n<li>Usa sempre <code class=\"\" data-line=\"\">set<\/code> per verifiche frequenti di <code class=\"\" data-line=\"\">x in collection<\/code>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-34\"  class=\"wp-block-heading\">6. Memoria: <code class=\"\" data-line=\"\">set<\/code> vs <code class=\"\" data-line=\"\">frozenset<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">s = set(range(1000))\nfs = frozenset(range(1000))\n\nprint(f&quot;set:       {sys.getsizeof(s)} byte&quot;)     # \u2192 32792\nprint(f&quot;frozenset: {sys.getsizeof(fs)} byte&quot;)   # \u2192 32792<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">frozenset<\/code> e <code class=\"\" data-line=\"\">set<\/code> consumano memoria identica.<\/li>\n\n\n\n<li>La differenza \u00e8 solo l\u2019immutabilit\u00e0.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-35\"  class=\"wp-block-heading\">7. Velocit\u00e0 di aggiunta: <code class=\"\" data-line=\"\">list.append<\/code> vs <code class=\"\" data-line=\"\">deque.append<\/code> vs <code class=\"\" data-line=\"\">deque.appendleft<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from collections import deque\nimport time\n\ndef time_append(collection, n, method=&#039;append&#039;):\n    start = time.perf_counter()\n    for i in range(n):\n        if method == &#039;appendleft&#039; and hasattr(collection, &#039;appendleft&#039;):\n            collection.appendleft(i)\n        else:\n            collection.append(i)\n    end = time.perf_counter()\n    return end - start\n\nn = 100_000\n\nlst = &#091;]\ndq = deque()\n\ntime_list_append = time_append(lst, n)              # \u2192 0.0100 secondi\ntime_deque_append = time_append(dq, n)              # \u2192 0.0100 secondi\ntime_deque_appendleft = time_append(deque(), n, &#039;appendleft&#039;)  # \u2192 0.0100 secondi\n\n# list.insert(0):\nlst = &#091;]\nstart = time.perf_counter()\nfor i in range(n):\n    lst.insert(0, i)\nend = time.perf_counter()\nprint(f&quot;list.insert(0):   {end - start:.4f} secondi&quot;)   # \u2192 5.0000 secondi<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">deque.appendleft<\/code> \u00e8 O(1), a differenza di <code class=\"\" data-line=\"\">list.insert(0)<\/code> che \u00e8 O(n).<\/li>\n\n\n\n<li>Usa <code class=\"\" data-line=\"\">deque<\/code> per operazioni frequenti a entrambe le estremit\u00e0.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-36\"  class=\"wp-block-heading\">\ud83e\udde0 Raccomandazioni prestazioni<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Situazione<\/th><th>Usare<\/th><th>Motivo<\/th><\/tr><\/thead><tbody><tr><td>Memorizzare numeri, memoria critica<\/td><td><code class=\"\" data-line=\"\">array.array<\/code><\/td><td>2x meno memoria, accesso pi\u00f9 veloce<\/td><\/tr><tr><td>Dati immutabili<\/td><td><code class=\"\" data-line=\"\">tuple<\/code><\/td><td>Pi\u00f9 veloce di <code class=\"\" data-line=\"\">list<\/code>, pi\u00f9 sicuro<\/td><\/tr><tr><td>Verifiche frequenti <code class=\"\" data-line=\"\">x in collection<\/code><\/td><td><code class=\"\" data-line=\"\">set<\/code> \/ <code class=\"\" data-line=\"\">frozenset<\/code><\/td><td>O(1) vs O(n) di <code class=\"\" data-line=\"\">list<\/code><\/td><\/tr><tr><td>Operazioni a entrambe le estremit\u00e0<\/td><td><code class=\"\" data-line=\"\">deque<\/code><\/td><td><code class=\"\" data-line=\"\">appendleft<\/code>\/<code class=\"\" data-line=\"\">popleft<\/code> in O(1)<\/td><\/tr><tr><td>Dati strutturati, memoria critica<\/td><td><code class=\"\" data-line=\"\">dataclass<\/code> + <code class=\"\" data-line=\"\">__slots__<\/code><\/td><td>Nessun <code class=\"\" data-line=\"\">__dict__<\/code>, meno memoria<\/td><\/tr><tr><td>Contare frequenze<\/td><td><code class=\"\" data-line=\"\">Counter<\/code><\/td><td>Ottimizzato per questo compito<\/td><\/tr><tr><td>Comportamento personalizzato<\/td><td><code class=\"\" data-line=\"\">UserList<\/code> \/ <code class=\"\" data-line=\"\">UserDict<\/code><\/td><td>Estensione sicura delle collezioni integrate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-37\"  class=\"wp-block-heading\">\ud83d\udcca Confronto collezioni<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tipo<\/th><th>Ordinato<\/th><th>Modificabile<\/th><th>Elementi unici<\/th><th>Accesso indice<\/th><th>Duplicati<\/th><\/tr><\/thead><tbody><tr><td><code class=\"\" data-line=\"\">list<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">tuple<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">dict<\/code><\/td><td>\u2705 S\u00ec*<\/td><td>\u2705 S\u00ec<\/td><td>Solo chiavi<\/td><td>\u274c No<\/td><td>Valori: \u2705<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">set<\/code><\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">frozenset<\/code><\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">SimpleNamespace<\/code><\/td><td>\u2705 S\u00ec (attr)<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No (attr possono ripetersi semanticamente)<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">namedtuple<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">deque<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">Counter<\/code><\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No (ma ha chiavi)<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">defaultdict<\/code><\/td><td>\u2705 S\u00ec*<\/td><td>\u2705 S\u00ec<\/td><td>Solo chiavi<\/td><td>\u274c No<\/td><td>Valori: \u2705<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">dataclass<\/code><\/td><td>\u2705 S\u00ec (campi)<\/td><td>\u2705 S\u00ec (se non frozen)<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">UserList<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">UserDict<\/code><\/td><td>\u2705 S\u00ec*<\/td><td>\u2705 S\u00ec<\/td><td>Solo chiavi<\/td><td>\u274c No<\/td><td>Valori: \u2705<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">str<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">bytes<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">bytearray<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">range<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">array.array<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec<\/td><td>\u2705 S\u00ec<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">ChainMap<\/code><\/td><td>\u2705 S\u00ec*<\/td><td>\u2705 S\u00ec<\/td><td>Solo chiavi<\/td><td>\u274c No<\/td><td>Valori: \u2705<\/td><\/tr><tr><td><code class=\"\" data-line=\"\">Enum<\/code><\/td><td>\u2705 S\u00ec<\/td><td>\u274c No<\/td><td>\u2705 S\u00ec (membri)<\/td><td>\u274c No<\/td><td>\u274c No<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>\u2014 da Python 3.7, <code class=\"\" data-line=\"\">dict<\/code>, <code class=\"\" data-line=\"\">defaultdict<\/code>, <code class=\"\" data-line=\"\">UserDict<\/code>, <code class=\"\" data-line=\"\">ChainMap<\/code> mantengono l\u2019ordine di inserimento.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-38\"  class=\"wp-block-heading\">\ud83d\udca1 Quando usare cosa?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Compito<\/th><th>Collezione<\/th><\/tr><\/thead><tbody><tr><td>Sequenza modificabile<\/td><td><code class=\"\" data-line=\"\">list<\/code> \/ <code class=\"\" data-line=\"\">deque<\/code> \/ <code class=\"\" data-line=\"\">UserList<\/code> \/ <code class=\"\" data-line=\"\">bytearray<\/code><\/td><\/tr><tr><td>Dati immutabili<\/td><td><code class=\"\" data-line=\"\">tuple<\/code> \/ <code class=\"\" data-line=\"\">namedtuple<\/code> \/ <code class=\"\" data-line=\"\">frozenset<\/code> \/ <code class=\"\" data-line=\"\">str<\/code> \/ <code class=\"\" data-line=\"\">bytes<\/code><\/td><\/tr><tr><td>Ricerca veloce, rimozione duplicati<\/td><td><code class=\"\" data-line=\"\">set<\/code> \/ <code class=\"\" data-line=\"\">frozenset<\/code><\/td><\/tr><tr><td>Dati strutturati<\/td><td><code class=\"\" data-line=\"\">dict<\/code> \/ <code class=\"\" data-line=\"\">dataclass<\/code> \/ <code class=\"\" data-line=\"\">SimpleNamespace<\/code> \/ <code class=\"\" data-line=\"\">UserDict<\/code> \/ <code class=\"\" data-line=\"\">TypedDict<\/code><\/td><\/tr><tr><td>Usabile come chiave di dict<\/td><td><code class=\"\" data-line=\"\">frozenset<\/code><\/td><\/tr><tr><td>Oggetti temporanei con accesso tramite <code class=\"\" data-line=\"\">.<\/code><\/td><td><code class=\"\" data-line=\"\">SimpleNamespace<\/code> \/ <code class=\"\" data-line=\"\">dataclass<\/code><\/td><\/tr><tr><td>Contare frequenze<\/td><td><code class=\"\" data-line=\"\">Counter<\/code><\/td><\/tr><tr><td>Valori predefiniti per chiavi<\/td><td><code class=\"\" data-line=\"\">defaultdict<\/code><\/td><\/tr><tr><td>Operazioni efficienti alle estremit\u00e0<\/td><td><code class=\"\" data-line=\"\">deque<\/code><\/td><\/tr><tr><td>Comportamento personalizzato lista<\/td><td><code class=\"\" data-line=\"\">UserList<\/code><\/td><\/tr><tr><td>Comportamento personalizzato dict<\/td><td><code class=\"\" data-line=\"\">UserDict<\/code><\/td><\/tr><tr><td>Dati binari<\/td><td><code class=\"\" data-line=\"\">bytes<\/code> \/ <code class=\"\" data-line=\"\">bytearray<\/code> \/ <code class=\"\" data-line=\"\">array.array<\/code><\/td><\/tr><tr><td>Configurazioni con gerarchia<\/td><td><code class=\"\" data-line=\"\">ChainMap<\/code><\/td><\/tr><tr><td>Costanti nominate<\/td><td><code class=\"\" data-line=\"\">Enum<\/code><\/td><\/tr><tr><td>Sequenze lazy<\/td><td><code class=\"\" data-line=\"\">range<\/code> \/ generatori<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Una collezione \u00e8 una struttura che raggruppa pi\u00f9 oggetti in un unico contenitore, facilitandone la gestione e l\u2019elaborazione dei dati. Rende il codice pi\u00f9 chiaro e semplifica il trattamento delle informazioni.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"left","neve_meta_author_avatar":"on","neve_post_elements_order":"[\"content\",\"tags\",\"comments\"]","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[610],"tags":[885,886,871,880,882,881,879,874,887,876,872,878,875,877,873,883],"class_list":["post-3176","post","type-post","status-publish","format-standard","hentry","category-python-basics","tag-tag-python-array-array","tag-tag-python-chainmap","tag-tag-python-collections","tag-python-counter","tag-tag-python-dataclass","tag-tag-python-defaultdict","tag-python-deque","tag-tag-python-dict","tag-tag-python-enum","tag-tag-python-frozaenset","tag-tag-python-list","tag-python-namedtuple","tag-tag-python-set","tag-tag-simplenamespace","tag-tag-python-typle","tag-tag-python-userlist"],"acf":[],"_links":{"self":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/3176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/comments?post=3176"}],"version-history":[{"count":0,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/3176\/revisions"}],"wp:attachment":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media?parent=3176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/categories?post=3176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/tags?post=3176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}