This rule raises an issue when a method modifies the size of a collection, while the same collection is iterated. == Why is this an issue? Iterating over a collection using a `for` loop in Python relies on iterators. An iterator is an object that allows you to traverse a collection of elements, such as a list or a dictionary. Iterators are used in `for` loops to iterate over the elements of a collection one at a time. When you create an iterator, it keeps track of the current position in the collection and provides a way to access the next element. The `next()` function is used to retrieve the next element from the iterator. When there are no more elements to iterate over, the `next()` function raises a StopIteration exception and the iteration stops. It is important to note that iterators are designed to be read-only. Modifying a collection while iterating over it can cause unexpected behavior, as the iterator may skip over or repeat elements. A `RuntimeError` may also be raised in this situation, with the message `changed size during iteration`. Therefore, it is important to avoid modifying a collection while iterating over it to ensure that your code behaves as expected. If you still want to modify the collection, it is best to use a second collection or to iterate over a copy of the original collection instead. === Code examples ==== Noncompliant code example [source,python,diff-id=1,diff-type=noncompliant] ---- def my_fun(): my_dict = {'a': 1, 'b': 2, 'c': 3} for key in my_dict: if my_dict[key] == 'foo': my_dict.pop(key) # Noncompliant: this will make the iteration unreliable ---- === Compliant solution [source,python,diff-id=1,diff-type=compliant] ---- def my_fun(): my_dict = {'a': 1, 'b': 2, 'c': 3} for key in list(my_dict.keys()): if my_dict[key] == 'foo': my_dict.pop(key) ---- == Resources === Documentation * Python Documentation - https://docs.python.org/3/tutorial/controlflow.html#for-statements[`for` Statements]