Under what circumstances should I deviate from the rule [should the courts be of known length]?
Missing.
This is a matter of significance. If an object has a value based on a fixed number of elements, then this is a tuple. (x, y), (c, m, y, k) colors, (lat, lon), etc. etc.
A tuple has a fixed number of elements based on the domain in general, and features of the problem.
Designing a tuple with an indefinite number of elements makes little sense. When do we go from (x, y) to (x, y, z) and then to the coordinates (x, y, z, w)? Not by simply matching the value, as if it is a list? If we go from 2-d to 3-d coordinates, there is usually pretty nice math to map coordinate systems. Do not add an item to the list.
What does the transition from (r, g, b) colors to something else mean? What is the 4th color in rgb system? For that matter, what is the fifth color in the cmyk plane?
Tuples do not change .
*args is a tuple because it is immutable. Yes, it has an indefinite number of arguments, but it is a rare counter expression for tuples of known, defined sizes.
What to do with an indefinite tuple of length. This counter example is so deep that we have two options.
Rejection of the very idea that tuples are of fixed length and are limited by the problem. The very idea of coordinates (x, y) and (r, g, b) colors is completely useless and wrong due to this counter example. Fixed-length tuples? Never.
Always convert all *args to lists to always have a fussy level of thoughtless compliance with the design principle. Hidden list? Always.
I like everything or nothing, because they make the software so simplistic and thoughtless.
Perhaps in these corner cases a tiny shred of “this requires thinking” is here. Tiny scrap.
Yes, *args is a tuple. Yes, this is an indefinite length. Yes, this is a counter example where “fixed by a problem domain” is “just unchanged”.
This leads us to the third choice in the case when the sequence is unchanged for another reason. You will never mutate it, so it is normal if it were a short indefinite size. In the even rarer case, when you expose *args , because you consider it as a stack or a queue, then you may need to make a list from it. But we cannot solve all the possible problems.
Thinking is sometimes required.
When you design, you create a tuple for some reason. Overlay a meaningful structure on your data. The number of elements with a fixed length? Tuple. A variable number of elements (i.e., variable)? List.