Простым способом создания круговой ссылки является наличие объекта, который ссылается на себя в свойстве:
function Foo() {
this.abc = "Hello";
this.circular = this;
}
var foo = new Foo();
alert(foo.circular.circular.circular.circular.circular.abc);
Здесь объект foo
содержит ссылку на себя.
С закрытием это обычно более неявное, просто имея круговую ссылку в области видимости, а не как явное свойство некоторого объекта:
var circular;
circular = function(arg) {
if (arg) {
alert(arg);
}
else {
// refers to the |circular| variable, and by that to itself.
circular("No argument");
}
}
circular("hello");
circular();
Здесь функция, сохраненная в circular
, относится к circular
и, тем самым, к себе. Он неявно содержит ссылку на себя, создавая круговую ссылку. Даже если circular
теперь выходит за пределы области действия, он по-прежнему ссылается на область функций. Простые сборщики мусора не распознают этот цикл и не собирают функцию.
Можно просто использовать панд. Функция DataFrame.transform1 таким образом:
df.transform(lambda x: x/x.max())