Es una estructura de datos especializada que admite operaciones de fusión eficientes y tiene un orden transversal definido. Por lo general, se usa para acumular datos de dependencias transitivas en reglas y aspectos. Obtén más información aquí.
Los elementos de un depset deben tener codificación hash y todos deben ser del mismo tipo (según lo definido por la función tipo(x) integrada), pero los depset no son simplemente 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 asignen a True
.
Los depsets son inmutables. Se deben crear con su función de constructor y se deben combinar o aumentar con otros depsets 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"
): No se especifica el orden (pero es determinista)."postorder"
(anteriormente"compile"
): Un pedido posterior de izquierda a derecha. De manera recursiva, esto desvía primero a todos los elementos secundarios a la izquierda y, luego, a los elementos directos primero."preorder"
(anteriormente"naive_link"
): Es un pedido anticipado de izquierda a derecha. De forma precisa, desvía los elementos directos primero hacia la izquierda y, luego, desvía recursivamente los elementos secundarios que se encuentran más a la izquierda primero."topological"
(anteriormente"link"
): Es un orden topológico desde la raíz hasta las hojas. No hay garantía de izquierda a derecha.
Dos depsets solo se pueden combinar si ambos tienen el mismo orden o uno de ellos tiene un orden "default"
. En este último caso, el orden del depset resultante será el mismo que el orden del otro.
Los valores predeterminados pueden contener valores duplicados, pero se suprimirán durante la iteración (con to_list()
). Los duplicados pueden interferir en la semántica de 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 el orden no se especifica (pero es determinista) para los elementos que se agregaron más de una vez al determinista. Tampoco se especifica el orden de los depsets con orden de
"default"
y para los elementos de los depsets secundarios cuyo orden difiere del del primario. La lista es una copia. modificarlo no tiene efecto en el depset y viceversa.