Obtuve una clase típica de ListNode algo como a continuación,

class ListNode:
    def __init__(self,val, next = None):
        self.val = val
        self.next = next

Creé dos instancias de esta clase y asigné uno del objeto a una variable llamada next en primera instancia como se muestra a continuación,

node = ListNode(1)
next_node = ListNode(2)
node.next = next_node

Sin embargo, si asigno nnode = None, el node.next todavía apunta a la instancia next_node y no es None.

print( next_node == node.next) # Prints True
next_node = None
print( node.next.val) # Prints 1

¿Cómo puedo hacer que todas las variables de referencia (por ejemplo, node.next en el caso anterior) hagan Ninguna sin asignarlas explícitamente a Ninguna?

1
Neo the second 27 jun. 2019 a las 22:35

1 respuesta

La mejor respuesta

Realmente me gusta tu pregunta. Probablemente esto no sea exactamente lo que está buscando, pero he encontrado la biblioteca weakref. Con él podrías intentar modificar tu código:

class ListNode:
    def __init__(self, val, next_=None):
        self.val = val
        self.next_ = next_

    def get_next(self):
        try:
            self.next_.check()
        except AttributeError: # if self.next_ exists then it does not have 'check' method.
            return self.next_
        except ReferenceError: # if it does not exists it will raise this exception
            return None

Luego, en lugar de asignar node.next_ = next_node, puede crear una referencia débil:

node = ListNode(1)
next_node = ListNode(2)
node.next_ = weakref.proxy(next_node)

print( next_node == node.next_) # prints True
next_node = None
print(node.get_next()) # prints None

¡Espero que esto ayude a resolver tu problema!

Editar: También he cambiado el nombre next a next_ porque next es una función integrada

1
Relandom 27 jun. 2019 a las 20:14