The reality is that almost any interaction with an object can cause it to mutate itself, since Python allows classes to override just about any operator. For example: &quot;a &gt; 3&quot;, &quot;5 in a&quot;, &quot;x = a.b&quot;, &quot;len(a)&quot;, &quot;print a&quot;, etc - all of these can cause a to mutate. In the end, you have to trust the code to do the Right Thing, or just not use it.