Python - как C #, Java, Perl, Ruby, Lua и многие другие языки - использует сборку мусора, а не ручное управление памятью. Вы просто произвольно создаете объекты и диспетчер памяти языка периодически (или когда вы специально направляете его) ищет любые объекты, которые больше не ссылаются на вашу программу.
Итак, если вы хотите удержать объект , просто держите ссылку на него. Если вы хотите, чтобы объект был освобожден (в конечном итоге), удалите любые ссылки на него.
def foo(names):
for name in names:
print name
foo(["Eric", "Ernie", "Bert"])
foo(["Guthtrie", "Eddie", "Al"])
Каждый из этих вызовов foo
создает объект Python list
, инициализированный тремя значениями. На время вызова foo
они ссылаются на переменную names
, но как только эта функция выходит из какой-либо переменной, она держит ссылку на них, и они являются честной игрой для удаления сборщика мусора.
Еще один пример для потомков.
Я использовал http://octave-online.net/ для разработки и запуска этого октавного скрипта.
Примечание: я включил вывод в качестве комментариев, чтобы показать результаты.
disp("2-state markov chain symbolic analysis");
syms lambda mu
L = [lambda,0]
# L = (sym) [λ 0] (1×2 matrix)
U = [1;0]
#U =
# 1
# 0
C = [ [1,1]; [lambda,-mu]]
#C = (sym 2×2 matrix)
# ⎡1 1 ⎤
# ⎢ ⎥
# ⎣λ -μ⎦
C^-1
#ans = (sym 2×2 matrix)
# ⎡ λ -1 ⎤
# ⎢────── + 1 ──────⎥
# ⎢-λ - μ -λ - μ⎥
# ⎢ ⎥
# ⎢ -λ 1 ⎥
# ⎢ ────── ──────⎥
# ⎣ -λ - μ -λ - μ⎦
P = C^-1 * U
#P = (sym 2×1 matrix)
#
# ⎡ λ ⎤
# ⎢────── + 1⎥
# ⎢-λ - μ ⎥
# ⎢ ⎥
# ⎢ -λ ⎥
# ⎢ ────── ⎥
# ⎣ -λ - μ ⎦
lambda_sys = L * C^-1 * U
#lambda_sys = (sym)
#
# ⎛ λ ⎞
# λ⋅⎜────── + 1⎟
# ⎝-λ - μ ⎠