{"id":321,"date":"2022-09-13T19:50:13","date_gmt":"2022-09-13T17:50:13","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=321"},"modified":"2022-09-13T19:50:14","modified_gmt":"2022-09-13T17:50:14","slug":"consumo-de-memoria-borrar-objetos-y-el-modulo-gc-garbage-collector","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=321","title":{"rendered":"Consumo de memoria , borrar objetos y el m\u00f3dulo gc (garbage collector)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando se trata del uso de variables, python hace un uso eficiente de la memoria. Esto quiere decir que a costa de que nuestro c\u00f3digo se ejecute un poco m\u00e1s lento, se encarga de gestionar la memoria de forma mas eficiente rehusando valores, liberando memoria no usada, &#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para comprobarlo vamos a hacer uso de una funci\u00f3n incorporada en built-in que se llama <strong>id()<\/strong>. Esta funci\u00f3n muestra el identificador del objeto que le pasamos como argumento. Cada variable deber\u00eda tener un identificador diferente pero en realidad no es as\u00ed. En el siguiente c\u00f3digo podemos observar como todas las variables excepto <strong>var_4<\/strong> disponen del mismo identificador:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">var_1 = 10\nvar_2 = var_1\nvar_3 = 10\nvar_4 = 11\nvar_5 = 10\nprint(id(var_1) , id(var_2) , id(var_3) , id(var_4) , id(var_5))\n\n4415691744 4415691744 4415691744 4415691776 4415691744<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Analizando el resultado, podemos llegar a la conclusi\u00f3n de que como las variables var_1, var_2, var_3 y var_5 disponen del mismo valor, python asigna el mismo identificador lo que quiere decir que consumen una cuarta parte de la memoria en comparaci\u00f3n con otros lenguajes que no hacen este uso inteligente de memoria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos reutilizar las variables, pero y s\u00ed queremos borrarlas, \u00bfqu\u00e9 hacemos?.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para borrar objetos disponemos del comando <strong>del<\/strong> , que se usa de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">var_1 = 10\ndel var_1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El recolector de basura de python acabar\u00e1 liberando la memoria de los objetos borrados o no \u00fatiles, pero s\u00ed por alguna raz\u00f3n quisi\u00e9ramos hacerlo nosotros manualmente, disponemos de un m\u00f3dulo llamado <strong>gc<\/strong>. Para usar este m\u00f3dulo primero debemos importarlo y posteriormente usar alguno de sus m\u00e9todos como por ejemplo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">gc.get_stats() &#8211; nos muestra informaci\u00f3n sobre los objetos a los que les sigue la pista, recolectados, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>gc.enable()<\/strong> &#8211; habilita el recolector autom\u00e1tico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>gc.disable()<\/strong> &#8211; deshabilita el recolector autom\u00e1tico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>gc.isenabled() <\/strong>&#8211; nos dir\u00e1 si est\u00e1 habilitado o deshabilitado el recolector de basura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>gc.collect()<\/strong> &#8211; sin argumentos fuerza la recolecci\u00f3n de basura<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>gc.is_tracked(objeto)<\/strong> &#8211; muestra True o False para indicar si le est\u00e1 siguiendo la pista al objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed que vamos a cambiar el c\u00f3digo anterior para borrar la variable y forzar la recolecci\u00f3n de basura.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import gc\nvar_1 = 10\ndel var_1\ngc.collect()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Cuando se trata del uso de variables, python hace un uso eficiente de la memoria. Esto quiere decir que a &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[130,2,6],"class_list":["post-321","post","type-post","status-publish","format-standard","hentry","category-python","tag-gc","tag-python","tag-python3"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=321"}],"version-history":[{"count":4,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/321\/revisions"}],"predecessor-version":[{"id":325,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/321\/revisions\/325"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}