No - I don't think they will be the same object. The Copy method does not set the object pointer to the same object - it copies the data across from one object to the other.

The reason for changing this code is that with this fix, metadata can be ID3Metadata subclass and we want it to stay that way - so we cannot assign metadata to self.metadata or we will change the class back to Metadata. So instead we assign metadata to self.orig_metadata (which is always of class Metadata) and copy the data across to self.metadata which could be an instance of either ID3Metadata or Metadata.

I hope that my explanation is readable. I sort of know why I made this change - but when I read back what I just wrote even I have trouble understanding it!! :-D