Tuples with named fields, from the collections module. See namedtuple — Python docs.
Regular tuples require remembering what each index means — point[0] vs point.x. Named tuples give you readable field access while keeping the lightweight, immutable nature of a tuple.
Point2d = namedtuple('Point2d', 'x y')
p = Point2d(10, 20)
print(p.x) # 10 — by name
print(p[0]) # 10 — by index still workspython named_tuples.py