Closed as duplicate of#127682
Description
Bug report
Bug description:
I can't upload comprehensionTestbed2.py because I am told the .py type is not allowed so I here is the script I used to reproduce this issue:
===========================================
# TestClass: Class that interacts with the DVD data file.
class TestClass:
# Initialize the file timestamp.
def __init__(self):
pass
# The iterator method.
def __iter__(self):
print('S1')
self._index = 0
return self
# The next method.
def __next__(self):
print('S5')
if self._index == 5:
raise StopIteration
value = self._index
self._index += 1
return value
# Test code.
print('#1')
for n in TestClass():
print(n)
print('#2')
numbers = [n for n in TestClass()]
print(numbers)
==============================================
Here is the output of the Python script above:
D:\Files\Testing> comprehensionTestbed2.py
#1
S1
S5
0
S5
1
S5
2
S5
3
S5
4
S5
#2
S1
S1 <----- The __iter__ method is invoked twice in the list comprehension when using 3.13.3 (and 3.13.2).
S5
S5
S5
S5
S5
S5
[0, 1, 2, 3, 4]
This does not happen with python 3.12.9 and is a real problem when the iter method creates a mutex.
Edward
CPython versions tested on:
3.13
Operating systems tested on:
Windows