Вы можете легко проверить это, добавив несколько print
операторов:
class myClassOne:
def __init__(self, a):
self.a = a
print("myClassOne instance created.")
def __str__(self):
return self.a
class myClassTwo:
def __init__(self, a):
self.a = a
print("myClassTwo instance created.")
def __str__(self):
return self.a
print("Creating list 'a' ...")
a = [1, 2, 3, myClassOne("hello"), myClassTwo("world"), "blah", "blah"]
print("... list 'a' created.")
print("Printing ids ...")
print(id(a[3]), id(a[4]))
print("... ids printed.")
print("Printing items ...")
print(a[3], a[4])
print("... items printed.")
Вот результат этого:
$ python3 hello.py
Creating list 'a' ...
myClassOne instance created.
myClassTwo instance created.
... list 'a' created.
Printing ids ...
139953120034712 139953120034656
... ids printed.
Printing items ...
hello world
... items printed.
Как видите, экземпляры созданыпри создании списка a
.
Это всегда так: когда вы говорите Python что-то сделать, он делает это немедленно, независимо от того, является ли эта инструкция частью построения списка или какой-либо другой.похожий объект.
Обратите внимание, что существует разница между указанием Python на сделать что-то (как в случае, когда вы создаете этот список) и сообщением how сделать что-то (как в случае, когда вы определяете myclassOne.__init__()
.
Когда вы определяете функцию или метод с помощью блока def ...
, вы сообщаете Python как :сделать что-то, и на самом деле это не будет сделано, пока вы не вызовете эту функцию или метод.
Когда вы создаете список, вы говорите Python to что-то сделать, так что он просто идетвперед и делает это.