Это потому, что sheetnames
является свойством ; другими словами, он выглядит как атрибут экземпляра, но когда вы обращаетесь к нему, функция фактически вызывается. Вы можете увидеть этот ответ для более подробной информации.
Теперь, если мы посмотрим на источник openpyxl
, мы можем найти определение sheetnames
:
@property
def sheetnames(self):
return [s.title for s in self._sheets]
sheetnames
создает и возвращает новый list
каждый раз, когда он вызывается, что вы можете доказать с помощью id
:
from openpyxl import Workbook
book = Workbook()
a = book.sheetnames
b = book.sheetnames
print(id(a) == id(b))
Выход:
False
Из-за этого вы на самом деле просто изменяете первый элемент этого нового list
, который создается каждый раз, когда вы вызываете sheetnames
.