Проблема в том, что вы модифицируете список, который вы повторяете в цикле for s in set1
. Этого можно избежать, используя copy (), чтобы убедиться, что вы выполняете итерацию для отдельного экземпляра списка: for s in set1.copy()
. Вы также можете ограничить длину цикла: for s in set1[:len(set1)]
BigDecimal.ZERO
предопределенная константа и поэтому не должна быть оценена от строки во времени выполнения, как BigDecimal("0")
был бы. Это будет быстрее и не потребует создания нового объекта.
, Если Ваш код должен работать пред1.5, то можно использовать (очень порочил), Шаблон "одиночка" для создания объектного эквивалента BigDecimal.ZERO
. В первый раз, когда это используется, это звонило бы BigDecimal("0")
для создания нулевого объекта и возврата тот объект на последующих вызовах. Иначе, если Ваш код работает на 1,5 системах, Ваш одноэлементный объект может просто возвратиться BigDecimal.ZERO
без штрафа во время выполнения.
Используя НУЛЬ не создает новый объект или требует любого парсинга. Определенно способ пойти.
Прежде, чем говорить о штрафах во время выполнения, удостоверьтесь, что эта часть кода имеет значение. Настройте профилирование и измерьте полный вариант использования.
, Тем не менее, предпочтите Bigdecimal.ZERO
, поскольку это проверяется во время компиляции, тогда как Вы можете случайно тип new BigDecimal("9")
, который компилятор примет, но который вызовет ошибки в Ваше приложение.
Из любопытства я проверил конструктору на BigDecimal, и это не имеет никакой оптимизации для эти "0" строка. Так определенно да, существует различие.