Да, это правильное поведение.
Однако, судя по вашему вопросу, это не то, что вы ожидали.
Если вы хотите, чтобы оно соответствовало вашим ожиданиям, помните о следующем:
Правило 1. Не используйте изменяемые объекты в качестве значений по умолчанию.
def anyFunction( arg=[] ):
Не будет создан свежий объект списка. Объект списка по умолчанию для arg
будет использоваться повсеместно.
Аналогично
def anyFunction( arg={} ):
не будет создавать свежий объект dict. Этот dict по умолчанию будет общим.
class MyClass( object ):
def __init__( self, arg= None ):
self.myList= [] if arg is None else arg
Это обычный способ предоставить значение аргумента по умолчанию, которое является свежим пустым объектом списка.
Да, это правильное поведение.
Однако из вашего вопроса видно, что это не то, чего вы ожидали.
Если вы хотите, чтобы он соответствовал вашим ожиданиям, помните следующее:
Правило 1. Не используйте изменяемые объекты в качестве значений по умолчанию.
def anyFunction( arg=[] ):
Не будет создавать новый объект списка. Объект списка по умолчанию для arg
будет использоваться совместно по всему месту.
Аналогично
def anyFunction( arg={} ):
не создает новый объект dict. Этот dict по умолчанию будет использоваться совместно.
class MyClass( object ):
def __init__( self, arg= None ):
self.myList= [] if arg is None else arg
Это обычный способ предоставления значения аргумента по умолчанию, которое является новым, пустым объектом списка.
-121--3311333- Можно переопределить системные свойства actors.maxPoolSize
и actors.corePoolSize
, которые ограничивают размер пула потоков актера, а затем выбрасывают в пул столько заданий, сколько могут обработать актеры. Почему, по-вашему, необходимо регулировать ваши реакции?
Это классический подводный камень. См. http://zephyrfalcon.org/labs/python_pitfalls.html , раздел 5: «Изменяемые аргументы по умолчанию»
Всегда создавайте такие функции:
def __init__ ( self, data = None ):
if data is None:
data = []
self._data = data
В качестве альтернативы вы также можете использовать data = data или []
, но это не позволяет пользователю передавать пустые параметры ( ''
, 0
, Ложь
и т. Д.).