Objects are everywhere in Python, as Python is an object-oriented programming (OOP) language by design. We work with objects constantly in our applications. Thus, it’s important to know the fundamentals of using objects, particularly instance objects of a custom class, as they’re the most prevalent data model in applications. In a function, for example, we expect that users may send different types of data, and we can add this flexibility by handling applicable data types accordingly. As another example, copying an object is necessary when we have a working copy to update while keeping the original object intact in case we need to revert our update. In this chapter, I’ll cover the fundamentals of objects. Certainly, this chapter isn’t intended to be exhaustive, as everything is an object in Python, and I can’t cover all the aspects of how objects are used. Another thing to note is that some sections address a specific problem (section 10.4, for example, is about changing a variable in a different scope), but I’ll use addressing the specific problem to cover a more general topic (such as the variable lookup order).