9. Important Distinctions
Key differences that trip people up; know them to avoid subtle bugs.
Q1 What is the difference between is and ==?
Answer:
==(Equality): Checks if the values of two objects are the same.is(Identity): Checks if two variables point to the exact same object in memory.
Example: a = [1]; b = [1]. Here, a == b is True, but a is b is False.
Q2 What is EAFP vs LBYL?
Answer: EAFP (Easier to Ask Forgiveness than Permission) tries an operation and handles exceptions; LBYL (Look Before You Leap) checks conditions first.
# EAFP
try:
value = d[key]
except KeyError:
value = default
# LBYL
value = d[key] if key in d else default
Explanation: EAFP is idiomatic in Python and thread-safe for races; LBYL can be clearer for simple checks.
Q3 What is the difference between an iterable and an iterator?
Answer:
An iterable is an object you can loop over (like a
list). It has an__iter__method that returns an iterator.An iterator is the object that does the actual iterating. It has a
__next__method that returns the next item and raisesStopIterationwhen finished.
Q4 What's the difference between threading, multiprocessing, and asyncio?
Answer: They are all tools for concurrency, but for different use cases:
threading: Good for I/O-bound tasks (e.g., network, disk). Limited for CPU-bound work due to the GIL allowing only one thread to run Python bytecode at a time.multiprocessing: Best for CPU-bound tasks; runs multiple processes in parallel and sidesteps the GIL.asyncio: Scales many concurrent I/O tasks on a single thread using non-blocking I/O andawait.
Q5 What is the difference between assignment and copying?
Answer: a = b makes two names point to the same object; copy.copy makes a shallow copy; copy.deepcopy recursively copies nested objects.
Q6 Which built-in types are mutable vs immutable?
Answer: Immutable: int, float, bool, str, tuple, frozenset, bytes. Mutable: list, dict, set, bytearray. Mutability affects hashing and use as dict keys.