Why use cyclic table references?

I’ve never fully understood why people embed cyclic references within tables, whether it be for a table key, value, metatable, or a combination of the three. I can only see self referencing a nested table or sub-table as being unnecessarily redundant and a pain to traverse through and duplicate (deep copy). On top of that, it has numerous incompatibilities with bindable/remote events/functions and JSON serializing. I literally cannot find a single reason to implement such a practice.

It’s just easier on the eye and simpler to write:

local Class = {}

Class.__index = Class

When working with code. There may be other instances of cyclic tables but I can’t think of many off the top of my head.

Other than that, I never find myself deep-copying or recursively traversing tables enough to think it’d even be much of an issue.

They typically do it for developer ergonomics; it’s just easier to write, easier to read, and obviously suits their use cases.

I’m pretty compulsive when it comes to cyclic tables though, going so far to create a prototype and metatable reference to ensure at no point a cyclic reference can occur. While not practical and certainly not quite that intuitive, it means I have full compatibility with a lot of Lua annotation software (Like LDoc and EmmyLua) and Lua language servers give me reasonable intellisense though my IDE.

Plus, in the end, I’ve weighed my own options on static analysis versus cutting down ~5 lines of code; to me it’s worth it and to others it’s not. Either answer is just fine as long as it suits the project’s design.