An immutable object is initialized by its constructor only, while a singleton is instantiated by a static method. A set of functions (or static methods) which manipulate some shared mutable state constitute a singleton. This implies that every mutable member of a singleton collection is itself a singleton.