Objects are shared as much as possible. This significantly reduces storage requirements because some objects such as long lists are very large. Also, most Tcl values are only read and never modified. This is especially true for procedure arguments, which can be shared between the caller and the called procedure. Assignment and argument binding is done by simply assigning a pointer to the value.
Reference counting is used to determine when it is safe to reclaim an object's storage.
The length member gives the number of bytes. If bytes is NULL , the string representation is invalid. An object's type manages its internal representation. If typePtr is NULL, the internal representation is invalid. The internalRep union member holds an object's internal representation.