Which Order Is A Promise

d = {}
for k in ["z", "a", "m"]:
    d[k] = None
print(list(d))

s = set()
for k in ["z", "a", "m"]:
    s.add(k)
print(list(s))

Which statement about the two print calls is correct?

A

list(s) is guaranteed to come out alphabetized, because Python hashes strings consistently within a run

B

list(d) is guaranteed to be ['z', 'a', 'm'] on any conforming Python 3.7+ implementation; list(s) has no order guaranteed by the language at all

C

Both are guaranteed to preserve insertion order, since sets became ordered alongside dicts in 3.7

D

Neither is guaranteed: dict order is just a CPython implementation detail, like set order