Borrar variable en python

5 minutos de lectura

avatar de usuario
Bnicholas

¿Hay alguna manera de borrar el valor de una variable en python?

Por ejemplo, si estuviera implementando un árbol binario:

class Node:
    self.left = somenode1
    self.right = somenode2

Si quisiera eliminar algún nodo del árbol, tendría que configurar self.left para vaciar.

  • Posible duplicado de ¿Hay alguna forma de eliminar las variables, funciones, etc. creadas de la memoria del intérprete?

    – Richard Mohn

    28 de enero de 2019 a las 4:59

avatar de usuario
estrellar

los del palabra clave haría.

>>> a=1
>>> a
1
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

Pero en este caso voto por self.left = None

  • a veces esto no lo elimina por completo, solo elimina esa referencia a un en la memoria. Esto puede dejar variables fantasma en la memoria que no obtienen gc.

    –Jakob Bowyer

    23 de noviembre de 2011 a las 10:30

  • del también tiene la desventaja de que si intenta eliminar una variable que no existe, arroja una excepción, que es normalmente indeseable.

    – Philip Kearns

    18 de febrero de 2014 a las 11:46


  • Solo quería señalar que si accidentalmente declaró una variable que está sobrescribiendo los comandos integrados, por ejemplo, type=… cuando quisiste escribir type(…) luego eliminarlo es la forma más fácil de recuperar la funcionalidad original. Es decir, si lo mantiene como Ninguno, seguirá cortando el acceso a la función subyacente.

    – pacador

    14/07/2014 a las 17:15

  • Recolección de basura/Recolector/Recolectado

    – mccc

    12 de abril de 2016 a las 14:11


  • Este era el que estaba buscando. Jugando en la línea cmd, tenía… set = set(myList) y luego me di cuenta de que ya no podía usar set como una función (doh). Usando del set me permitió usarlo de nuevo como fx. Por supuesto, nunca usaría esa var reservada en un script real.

    – jbchurchill

    7 de junio de 2017 a las 13:08


avatar de usuario
bnaul

Qué hay de malo en self.left = None?

  • No estoy familiarizado con la palabra clave Ninguno. ¿Es esto similar a nulo en otros idiomas?

    – Bnicholas

    23 de noviembre de 2011 a las 5:41

  • Sí; es equivalente a nulo.

    – Smashery

    23 de noviembre de 2011 a las 5:44

  • @Bnicholas Sin embargo, no es como null en PHP, en ese establecimiento de una variable para null en PHP le brinda un comportamiento similar en la mayoría de los casos como si no lo hubiera definido en primer lugar. un valor de None en Python es bastante diferente de una variable indefinida. None es bastante como la mayoría de las otras encarnaciones de nullsin embargo (hasta que entremos en detalles más arcanos, al menos).

    – ben

    23 de noviembre de 2011 a las 5:57

  • Abra la terminal de python y escriba print x y presiona enter. Esto producirá un error de interpretación, al igual que la mayoría de los idiomas cuando intenta imprimir una variable indefinida. Pero si define la variable y luego intenta borrarla con Ninguno, usando el print x el código producirá la palabra None como salida. Soy nuevo en python, por lo que podría estar equivocado, pero este no parece ser el comportamiento de una variable borrada.

    – Musixauce3000

    30 de marzo de 2016 a las 13:52

  • Esta solución no es la mejor solución. Simplemente lo asigna como nulo, pero sigue siendo una variable. Si tuviera que sobrescribir palabras clave, aún obtendría errores al intentar llamar a un tipo ninguno. Usar del variable

    – Dustin K.

    21 de agosto de 2019 a las 20:53

avatar de usuario
usuario11788

var = None “borra el valor”, estableciendo el valor de la variable en “nulo” como el valor de “Ninguno”, sin embargo, el puntero a la variable permanece.

del var elimina totalmente la definición de la variable.

En caso de que quiera usar la variable más tarde, por ejemplo, establezca un nuevo valor para ella, es decir, conserve la variable, None seria mejor.

  • ¿Qué sucede si quiero eliminar por completo una variable que en algunas circunstancias no existe? ¿Hay algún parámetro para evitar un error? Necesito borrar varias variables: del a, b, c, d Podría usar loop y probar/excepto, pero prefiero algún interruptor para evitarlo.

    – Tedo Vrbanec

    19 de enero de 2019 a las 17:17


En realidad, eso no elimina la variable/propiedad. Todo lo que hará es establecer su valor en None, por lo tanto, la variable seguirá ocupando espacio en la memoria. Si desea borrar por completo toda la existencia de la variable de la memoria, simplemente puede escribir:

del self.left

avatar de usuario
U12-delantero

  • si quieres eliminarlo por completo usar del:

    del your_variable
    
  • O en su defecto, a hacer el valor None:

    your_variable = None
    
  • si es un mutable iterable (listas, conjuntos, diccionarios, etc., pero no tuplas porque son inmutables), puede dejarlo vacío como:

    your_variable.clear()
    

Después your_variable estará vacío

avatar de usuario
andrea

¿Quieres eliminar una variable, verdad?

ok, creo que tengo una mejor idea alternativa a la respuesta de @bnaul:

Puede borrar nombres individuales con del:

del x

o puede eliminarlos de la globals() objeto:

for name in dir():
    if not name.startswith('_'):
        del globals()[name]

Este es solo un ciclo de ejemplo; De manera defensiva, solo elimina los nombres que no comienzan con un guión bajo, asumiendo (no sin razón) que solo usó nombres sin un guión bajo al comienzo en su intérprete. Podría usar una lista codificada de nombres para mantener en su lugar (lista blanca) si realmente quisiera ser minucioso. No hay una función incorporada para hacer la limpieza por usted, aparte de simplemente salir y reiniciar el intérprete.

Los módulos que ha importado (como import os) van a seguir siendo importados porque están referenciados por sys.modules; las importaciones posteriores reutilizarán el objeto de módulo ya importado. Simplemente no tendrá una referencia a ellos en su espacio de nombres global actual.

avatar de usuario
Umair Ayub

Elimine su contenido configurándolo en None y entonces del para eliminar su puntero de la memoria

variable = None; del variable

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad