Основное отличие состоит в том, что sorted(some_list)
возвращает новый list
:
a = [3, 2, 1]
print sorted(a) # new list
print a # is not modified
и some_list.sort()
, сортирует список на месте :
a = [3, 2, 1]
print a.sort() # in place
print a # it's modified
Обратите внимание, что поскольку a.sort()
ничего не возвращает, print a.sort()
будет печатать None
.
Можно ли восстановить исходные позиции списка после list.sort () ?
Нет, поскольку он изменяет исходный список.
Короткий ответ заключается в том, что пользователи не должны видеть это сообщение. Пользователи не должны создавать утечки памяти в унифицированном менеджере памяти.
То, что такие утечки происходят, является ошибкой Spark: SPARK-11293
Но если вы хотите понять причину утечки памяти, вот как я это сделал.
TaskMemoryManager.java
добавьте дополнительные записи в acquireExecutionMemory
и releaseExecutionMemory
: logger.error("stack trace:", new Exception());
TaskMemoryManager.java
. (Легче, чем вычисление конфигураций протоколирования ...) Теперь вы увидите полную трассировку стека для всех распределений и освобождений. Постарайтесь сопоставить их и найти распределения без освобождения. Теперь у вас есть трассировка стека для источника утечки.