โครงสร้างข้อมูลเฉพาะที่รองรับการผสานอย่างมีประสิทธิภาพและมีลำดับการข้ามที่กำหนดไว้ โดยทั่วไปจะใช้เพื่อสะสมข้อมูลจากการขึ้นต่อกันแบบส่งผ่านในกฎและแง่มุมต่างๆ ดูข้อมูลเพิ่มเติมที่ นี่
องค์ประกอบของ depset ต้องเป็นแบบแฮชได้และเป็นประเภทเดียวกันทั้งหมด (ตามที่กำหนดโดยฟังก์ชัน type(x) ในตัว) แต่ depset ไม่ใช่เพียงแค่ชุดแฮชและไม่รองรับการทดสอบการเป็นสมาชิกอย่างรวดเร็ว หากต้องการประเภทข้อมูลชุดทั่วไป คุณสามารถจำลองได้โดยใช้พจนานุกรมที่คีย์ทั้งหมดแมปกับ True
Depset เปลี่ยนแปลงไม่ได้ ควรสร้างโดยใช้ ฟังก์ชันตัวสร้าง และผสานหรือเพิ่มด้วย depset อื่นๆ ผ่านอาร์กิวเมนต์ transitive
พารามิเตอร์ order จะกำหนดประเภทการข้ามที่ใช้เพื่อแปลง depset เป็น iterable โดยมีค่าที่เป็นไปได้ 4 ค่า ดังนี้
"default"(เดิมชื่อ"stable"): ไม่ได้ระบุลำดับ (แต่กำหนดได้)"postorder"(เดิมชื่อ"compile"): การจัดลำดับหลังแบบจากซ้ายไปขวา กล่าวคือ ฟังก์ชันนี้จะข้ามองค์ประกอบย่อยทั้งหมดแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน แล้วจึงข้ามองค์ประกอบโดยตรงแบบจากซ้ายไปขวา"preorder"(เดิมชื่อ"naive_link"): การจัดลำดับก่อนแบบจากซ้ายไปขวา กล่าวคือ ฟังก์ชันนี้จะข้ามองค์ประกอบโดยตรงแบบจากซ้ายไปขวา แล้วจึงข้ามองค์ประกอบย่อยแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน"topological"(เดิมชื่อ"link"): การจัดลำดับโทโพโลยีจากรูทลงไปที่ลีฟ ไม่มีการรับประกันการจัดลำดับจากซ้ายไปขวา
คุณจะผสาน depset 2 รายการได้ก็ต่อเมื่อ depset ทั้ง 2 รายการมีลำดับเดียวกัน หรือ depset รายการใดรายการหนึ่งมีลำดับ "default" ในกรณีหลังนี้ ลำดับของ depset ที่ได้จะเป็นลำดับเดียวกับลำดับของ depset อีกรายการ
Depset อาจมีค่าที่ซ้ำกัน แต่ระบบจะระงับค่าเหล่านี้เมื่อมีการวนซ้ำ (โดยใช้ to_list()) ค่าที่ซ้ำกันอาจรบกวนความหมายของการจัดลำดับ
สมาชิก
to_list
list depset.to_list()
"default" และสำหรับองค์ประกอบของ depset ย่อยที่มีลำดับแตกต่างจาก depset ระดับบนสุด รายการนี้เป็นสำเนา การแก้ไขรายการนี้จะไม่มีผลกับ depset และในทางกลับกัน