Es una estructura de datos especializada que admite operaciones de combinación eficientes y tiene un orden de recorrido definido. Se usa con frecuencia para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, consulta este artículo.
Los elementos de un conjunto de dependencias deben ser hashables y todos del mismo tipo (como lo define la función type(x) integrada), pero los conjuntos de dependencias no son solo conjuntos de hash y no admiten pruebas de membresía rápidas. Si necesitas un tipo de datos de conjunto general, puedes simular uno con un diccionario en el que todas las claves se asignan a True
.
Los conjuntos de dependencias son inmutables. Se deben crear con su función de constructor y combinarse o aumentarse con otros conjuntos de dependencias a través del argumento transitive
.
El parámetro order
determina el tipo de recorrido que se realiza para convertir el depset en iterable. Hay cuatro valores posibles:
"default"
(anteriormente"stable"
): El orden no se especifica (pero es determinista)."postorder"
(anteriormente"compile"
): Es un orden posterior de izquierda a derecha. Específicamente, recorre recursivamente todos los elementos secundarios de izquierda a derecha y, luego, los elementos directos de izquierda a derecha."preorder"
(anteriormente"naive_link"
): Es un pedido por adelantado de izquierda a derecha. Específicamente, recorre los elementos directos de izquierda a derecha y, luego, recorre recursivamente los elementos secundarios de izquierda a derecha."topological"
(anteriormente"link"
): Es un ordenamiento topológico desde la raíz hasta las hojas. No hay garantía de izquierda a derecha.
Solo se pueden combinar dos conjuntos de dependencias si ambos tienen el mismo orden o si uno de ellos tiene el orden "default"
. En este último caso, el orden del depset resultante será el mismo que el orden del otro.
Los conjuntos de dependencias pueden contener valores duplicados, pero estos se suprimirán cuando se itere (con to_list()
). Los duplicados pueden interferir con la semántica del orden.
Miembros
to_list
list depset.to_list()Muestra una lista de los elementos, sin duplicados, en el orden de recorrido del depset. Ten en cuenta que no se especifica el orden (pero determinista) para los elementos que se agregaron más de una vez al determinista. El orden tampoco se especifica para los conjuntos de dependencias ordenados por
"default"
ni para los elementos de conjuntos de dependencias secundarios cuyo orden difiere del del conjunto de dependencias superior. La lista es una copia; modificarla no tiene efecto en el conjunto de dependencias y viceversa.