RE:Estructuras dinámicas en Python
Hola,
por supuesto que si. Por ejemplo, una lista muy simple y dinámica se realizaría de la siguiente forma:
a = [] # Aqui se construye la lista
a.append(2)
a.append(3)
#Se añaden dos elementos a la lista y el tamaño crece...
Si bien, esta forma de tener objetos dinámicos en memoria no se puede comparar a la de C, puesto que el constructor de la clase List tiene una implementación interna que gestiona la memoria. Posiblemente, al declarar un objeto lista se reserve cierta cantidad de memoria para no tener que ir reservarndo siempre que se hagan operaciones con el elemento. Es una cuestión de optimización, debes tener en cuenta que en C también se hacen este tipo de cosas para evitar tener que reservar y liberar continuamente la memoria.
Otra forma de reservar espacio de memoria para los objetos es usar la palabra reservada None. Por ejemplo, en 'b' tenemos una lista de 50 elementos vacía.
b = [None]*50
Siempre podemos hacer crecer la lista con el método append o el operador '+' y eliminar elementos con el operador del.
En cuanto a los árboles binarios que comentas, de la misma forma que en C guardas un puntero a memoria de la estructura de las hojas del árbol, en Python internamente se realiza el mismo procedimiento si, por ejemplo, tienes un caso similar al siguiente:
class ABB:
def __init__(self, izq, der):
self.izq = izq
self.der = der
def anyade(self, elem):
if elem <= self.izq:
self.izq.anyade(elem)
else:
self.der.anyade(elem)
a = ABB(Nodo(2),Nodo(4))
Por cierto, esto de arriba no funciona... es solo una aproximación, la recursividad necesita de un caso base que la clase ABB debería controlar, etc.
En fin, espero haberte resuelto alguna duda.
Saludos