Commit 584265b0 authored by Georg Brandl's avatar Georg Brandl

Add more entries to the glossary.

Written by Jeff Wheeler for GHOP.
parent b15a8df5
...@@ -185,6 +185,7 @@ docs@python.org), and we'll be glad to correct the problem. ...@@ -185,6 +185,7 @@ docs@python.org), and we'll be glad to correct the problem.
* Glyn Webster * Glyn Webster
* Bob Weiner * Bob Weiner
* Eddy Welbourne * Eddy Welbourne
* Jeff Wheeler
* Mats Wichmann * Mats Wichmann
* Gerry Wiener * Gerry Wiener
* Timothy Wild * Timothy Wild
......
...@@ -57,6 +57,10 @@ htmlhelp: build ...@@ -57,6 +57,10 @@ htmlhelp: build
@echo "Build finished; now you can run HTML Help Workshop with the" \ @echo "Build finished; now you can run HTML Help Workshop with the" \
"build/htmlhelp/pydoc.hhp project file." "build/htmlhelp/pydoc.hhp project file."
latex: BUILDER = latex
latex: build
@echo "Build finished; the LaTeX files are in build/latex."
clean: clean:
-rm -rf build/* -rm -rf build/*
-rm -rf tools/sphinx -rm -rf tools/sphinx
...@@ -48,6 +48,9 @@ Available make targets are: ...@@ -48,6 +48,9 @@ Available make targets are:
To create the CHM file, you need to run the Microsoft HTML Help Workshop To create the CHM file, you need to run the Microsoft HTML Help Workshop
over the generated project (.hhp) file. over the generated project (.hhp) file.
* "latex", which builds LaTeX source files that can be run with "pdflatex"
to produce PDF documents.
A "make update" updates the Subversion checkouts in `tools/`. A "make update" updates the Subversion checkouts in `tools/`.
......
...@@ -15,6 +15,17 @@ Glossary ...@@ -15,6 +15,17 @@ Glossary
``...`` ``...``
The typical Python prompt of the interactive shell when entering code for The typical Python prompt of the interactive shell when entering code for
an indented code block. an indented code block.
argument
A value passed to a function or method, assigned to a name local to
the body. A function or method may have both positional arguments and
keyword arguments in its definition. Positional and keyword arguments
may be variable-length: ``*`` accepts or passes (if in the function
definition or call) several positional arguments in a list, while ``**``
does the same for keyword arguments in a dictionary.
Any expression may be used within the argument list, and the evaluated
value is passed to the local variable.
BDFL BDFL
Benevolent Dictator For Life, a.k.a. `Guido van Rossum Benevolent Dictator For Life, a.k.a. `Guido van Rossum
...@@ -57,6 +68,22 @@ Glossary ...@@ -57,6 +68,22 @@ Glossary
advanced mathematical feature. If you're not aware of a need for them, advanced mathematical feature. If you're not aware of a need for them,
it's almost certain you can safely ignore them. it's almost certain you can safely ignore them.
decorator
A function returning another function, usually applied as a function
transformation using the ``@wrapper`` syntax. Common examples for
decorators are :func:`classmethod` and :func:`staticmethod`.
The decorator syntax is merely syntactic sugar, the following two
function definitions are semantically equivalent::
def f(...):
...
f = staticmethod(f)
@staticmethod
def f(...):
...
descriptor descriptor
Any *new-style* object that defines the methods :meth:`__get__`, Any *new-style* object that defines the methods :meth:`__get__`,
:meth:`__set__`, or :meth:`__delete__`. When a class attribute is a :meth:`__set__`, or :meth:`__delete__`. When a class attribute is a
...@@ -94,10 +121,24 @@ Glossary ...@@ -94,10 +121,24 @@ Glossary
statements. The technique contrasts with the :term:`LBYL` style that is statements. The technique contrasts with the :term:`LBYL` style that is
common in many other languages such as C. common in many other languages such as C.
expression
A piece of syntax which can be evaluated to some value. In other words,
an expression is an accumulation of expression elements like literals, names,
attribute access, operators or function calls that all return a value.
In contrast to other languages, not all language constructs are expressions,
but there are also :term:`statement`\s that cannot be used as expressions,
such as :keyword:`print` or :keyword:`if`. Assignments are also not
expressions.
extension module extension module
A module written in C, using Python's C API to interact with the core and A module written in C, using Python's C API to interact with the core and
with user code. with user code.
function
A series of statements which returns some value to a caller. It can also
be passed zero or more arguments which may be used in the execution of
the body. See also :term:`argument` and :term:`method`.
__future__ __future__
A pseudo module which programmers can use to enable new language features A pseudo module which programmers can use to enable new language features
which are not compatible with the current interpreter. For example, the which are not compatible with the current interpreter. For example, the
...@@ -241,6 +282,17 @@ Glossary ...@@ -241,6 +282,17 @@ Glossary
More information can be found in :ref:`typeiter`. More information can be found in :ref:`typeiter`.
keyword argument
Arguments which are preceded with a ``variable_name=`` in the call.
The variable name designates the local name in the function to which the
value is assigned. ``**`` is used to accept or pass a dictionary of
keyword arguments. See :term:`argument`.
lambda
An anonymous inline function consisting of a single :term:`expression`
which is evaluated when the function is called. The syntax to create
a lambda function is ``lambda [arguments]: expression``
LBYL LBYL
Look before you leap. This coding style explicitly tests for Look before you leap. This coding style explicitly tests for
pre-conditions before making calls or lookups. This style contrasts with pre-conditions before making calls or lookups. This style contrasts with
...@@ -271,6 +323,12 @@ Glossary ...@@ -271,6 +323,12 @@ Glossary
singletons, and many other tasks. singletons, and many other tasks.
More information can be found in :ref:`metaclasses`. More information can be found in :ref:`metaclasses`.
method
A function that is defined inside a class body. If called as an attribute
of an instance of that class, the method will get the instance object as
its first :term:`argument` (which is usually called ``self``).
See :term:`function` and :term:`nested scope`.
mutable mutable
Mutable objects can change their value but keep their :func:`id`. See Mutable objects can change their value but keep their :func:`id`. See
...@@ -305,10 +363,32 @@ Glossary ...@@ -305,10 +363,32 @@ Glossary
More information can be found in :ref:`newstyle`. More information can be found in :ref:`newstyle`.
positional argument
The arguments assigned to local names inside a function or method,
determined by the order in which they were given in the call. ``*`` is
used to either accept multiple positional arguments (when in the
definition), or pass several arguments as a list to a function. See
:term:`argument`.
Python 3000 Python 3000
Nickname for the next major Python version, 3.0 (coined long ago when the Nickname for the next major Python version, 3.0 (coined long ago when the
release of version 3 was something in the distant future.) release of version 3 was something in the distant future.)
Pythonic
An idea or piece of code which closely follows the most common idioms of
the Python language, rather than implementing code using concepts common
in other languages. For example, a common idiom in Python is the :keyword:`for`
loop structure; other languages don't have this easy keyword, so people
use a numerical counter instead::
for i in range(len(food)):
print food[i]
As opposed to the cleaner, Pythonic method::
for piece in food:
print piece
reference count reference count
The number of places where a certain object is referenced to. When the The number of places where a certain object is referenced to. When the
reference count drops to zero, an object is deallocated. While reference reference count drops to zero, an object is deallocated. While reference
...@@ -331,6 +411,18 @@ Glossary ...@@ -331,6 +411,18 @@ Glossary
mapping rather than a sequence because the lookups use arbitrary mapping rather than a sequence because the lookups use arbitrary
:term:`immutable` keys rather than integers. :term:`immutable` keys rather than integers.
slice
A list containing a portion of an indexed list-like object. A slice is
created using the subscript notation, ``[]`` with colons between numbers
when several are given, such as in ``variable_name[1:3:5]``. The bracket
(subscript) notation uses :class:`slice` objects internally (or in older
versions, :meth:`__getslice__` and :meth:`__setslice__`).
statement
A statement is part of a suite (a "block" of code). A statement is either
an :term:`expression` or a one of several constructs with a keyword, such
as :keyword:`if`, :keyword:`while` or :keyword:`print`.
type type
The type of a Python object determines what kind of object it is; every The type of a Python object determines what kind of object it is; every
object has a type. An object's type is accessible as its object has a type. An object's type is accessible as its
......
...@@ -96,7 +96,7 @@ passed along to the registered function when it is called:: ...@@ -96,7 +96,7 @@ passed along to the registered function when it is called::
# or: # or:
atexit.register(goodbye, adjective='nice', name='Donny') atexit.register(goodbye, adjective='nice', name='Donny')
Usage as a decorator:: Usage as a :term:`decorator`::
import atexit import atexit
......
...@@ -290,7 +290,7 @@ structure representing a stack trace. ...@@ -290,7 +290,7 @@ structure representing a stack trace.
The following two methods can be called by clients to use a debugger to debug a The following two methods can be called by clients to use a debugger to debug a
statement, given as a string. :term:`statement`, given as a string.
.. method:: Bdb.run(cmd, [globals, [locals]]) .. method:: Bdb.run(cmd, [globals, [locals]])
......
...@@ -1119,9 +1119,9 @@ the table. ...@@ -1119,9 +1119,9 @@ the table.
| | | | all conversions. Can be | | | | | all conversions. Can be |
| | | | used as the system | | | | | used as the system |
| | | | encoding if no automatic | | | | | encoding if no automatic |
| | | | coercion between byte and | | | | | :term:`coercion` between |
| | | | Unicode strings is | | | | | byte and Unicode strings |
| | | | desired. | | | | | is desired. |
+--------------------+---------------------------+----------------+---------------------------+ +--------------------+---------------------------+----------------+---------------------------+
| unicode_escape | | Unicode string | Produce a string that is | | unicode_escape | | Unicode string | Produce a string that is |
| | | | suitable as Unicode | | | | | suitable as Unicode |
......
...@@ -43,8 +43,8 @@ To do just the former: ...@@ -43,8 +43,8 @@ To do just the former:
:exc:`OverflowError` or :exc:`ValueError` if there is an invalid literal. :exc:`OverflowError` or :exc:`ValueError` if there is an invalid literal.
The *symbol* argument determines whether *source* is compiled as a statement The *symbol* argument determines whether *source* is compiled as a statement
(``'single'``, the default) or as an expression (``'eval'``). Any other value (``'single'``, the default) or as an :term:`expression` (``'eval'``). Any
will cause :exc:`ValueError` to be raised. other value will cause :exc:`ValueError` to be raised.
.. warning:: .. warning::
......
...@@ -17,9 +17,9 @@ Functions provided: ...@@ -17,9 +17,9 @@ Functions provided:
.. function:: contextmanager(func) .. function:: contextmanager(func)
This function is a decorator that can be used to define a factory function for This function is a :term:`decorator` that can be used to define a factory
:keyword:`with` statement context managers, without needing to create a class or function for :keyword:`with` statement context managers, without needing to
separate :meth:`__enter__` and :meth:`__exit__` methods. create a class or separate :meth:`__enter__` and :meth:`__exit__` methods.
A simple example (this is not recommended as a real way of generating HTML!):: A simple example (this is not recommended as a real way of generating HTML!)::
......
...@@ -1135,7 +1135,8 @@ capabilities, then you should use the advanced API. ...@@ -1135,7 +1135,8 @@ capabilities, then you should use the advanced API.
The advanced API revolves around two container classes, which are used to store The advanced API revolves around two container classes, which are used to store
the interactive examples extracted from doctest cases: the interactive examples extracted from doctest cases:
* :class:`Example`: A single python statement, paired with its expected output. * :class:`Example`: A single python :term:`statement`, paired with its expected
output.
* :class:`DocTest`: A collection of :class:`Example`\ s, typically extracted * :class:`DocTest`: A collection of :class:`Example`\ s, typically extracted
from a single docstring or text file. from a single docstring or text file.
......
...@@ -161,8 +161,8 @@ available. They are listed here in alphabetical order. ...@@ -161,8 +161,8 @@ available. They are listed here in alphabetical order.
@classmethod @classmethod
def f(cls, arg1, arg2, ...): ... def f(cls, arg1, arg2, ...): ...
The ``@classmethod`` form is a function decorator -- see the description of The ``@classmethod`` form is a function :term:`decorator` -- see the description
function definitions in :ref:`function` for details. of function definitions in :ref:`function` for details.
It can be called either on the class (such as ``C.f()``) or on an instance (such It can be called either on the class (such as ``C.f()``) or on an instance (such
as ``C().f()``). The instance is ignored except for its class. If a class as ``C().f()``). The instance is ignored except for its class. If a class
...@@ -825,7 +825,7 @@ available. They are listed here in alphabetical order. ...@@ -825,7 +825,7 @@ available. They are listed here in alphabetical order.
If given, *doc* will be the docstring of the property attribute. Otherwise, the If given, *doc* will be the docstring of the property attribute. Otherwise, the
property will copy *fget*'s docstring (if it exists). This makes it possible to property will copy *fget*'s docstring (if it exists). This makes it possible to
create read-only properties easily using :func:`property` as a decorator:: create read-only properties easily using :func:`property` as a :term:`decorator`::
class Parrot(object): class Parrot(object):
def __init__(self): def __init__(self):
...@@ -1015,7 +1015,7 @@ available. They are listed here in alphabetical order. ...@@ -1015,7 +1015,7 @@ available. They are listed here in alphabetical order.
.. index:: single: Numerical Python .. index:: single: Numerical Python
Return a slice object representing the set of indices specified by Return a :term:`slice` object representing the set of indices specified by
``range(start, stop, step)``. The *start* and *step* arguments default to ``range(start, stop, step)``. The *start* and *step* arguments default to
``None``. Slice objects have read-only data attributes :attr:`start`, ``None``. Slice objects have read-only data attributes :attr:`start`,
:attr:`stop` and :attr:`step` which merely return the argument values (or their :attr:`stop` and :attr:`step` which merely return the argument values (or their
...@@ -1063,8 +1063,8 @@ available. They are listed here in alphabetical order. ...@@ -1063,8 +1063,8 @@ available. They are listed here in alphabetical order.
@staticmethod @staticmethod
def f(arg1, arg2, ...): ... def f(arg1, arg2, ...): ...
The ``@staticmethod`` form is a function decorator -- see the description of The ``@staticmethod`` form is a function :term:`decorator` -- see the
function definitions in :ref:`function` for details. description of function definitions in :ref:`function` for details.
It can be called either on the class (such as ``C.f()``) or on an instance (such It can be called either on the class (such as ``C.f()``) or on an instance (such
as ``C().f()``). The instance is ignored except for its class. as ``C().f()``). The instance is ignored except for its class.
......
...@@ -68,9 +68,9 @@ The :mod:`functools` module defines the following functions: ...@@ -68,9 +68,9 @@ The :mod:`functools` module defines the following functions:
*WRAPPER_UPDATES* (which updates the wrapper function's *__dict__*, i.e. the *WRAPPER_UPDATES* (which updates the wrapper function's *__dict__*, i.e. the
instance dictionary). instance dictionary).
The main intended use for this function is in decorator functions which wrap the The main intended use for this function is in :term:`decorator` functions which
decorated function and return the wrapper. If the wrapper function is not wrap the decorated function and return the wrapper. If the wrapper function is
updated, the metadata of the returned function will reflect the wrapper not updated, the metadata of the returned function will reflect the wrapper
definition rather than the original function definition, which is typically less definition rather than the original function definition, which is typically less
than helpful. than helpful.
......
...@@ -235,7 +235,7 @@ Note: ...@@ -235,7 +235,7 @@ Note:
.. function:: isfunction(object) .. function:: isfunction(object)
Return true if the object is a Python function or unnamed (lambda) function. Return true if the object is a Python function or unnamed (:term:`lambda`) function.
.. function:: istraceback(object) .. function:: istraceback(object)
......
...@@ -280,10 +280,10 @@ Operations which work with sequences include: ...@@ -280,10 +280,10 @@ Operations which work with sequences include:
Many operations have an "in-place" version. The following functions provide a Many operations have an "in-place" version. The following functions provide a
more primitive access to in-place operators than the usual syntax does; for more primitive access to in-place operators than the usual syntax does; for
example, the statement ``x += y`` is equivalent to ``x = operator.iadd(x, y)``. example, the :term:`statement` ``x += y`` is equivalent to
Another way to put it is to say that ``z = operator.iadd(x, y)`` is equivalent ``x = operator.iadd(x, y)``. Another way to put it is to say that
to the compound statement ``z = x; z += y``. ``z = operator.iadd(x, y)`` is equivalent to the compound statement
``z = x; z += y``.
.. function:: iadd(a, b) .. function:: iadd(a, b)
__iadd__(a, b) __iadd__(a, b)
......
...@@ -228,9 +228,9 @@ Sets can only contain immutable elements. For convenience, mutable :class:`Set` ...@@ -228,9 +228,9 @@ Sets can only contain immutable elements. For convenience, mutable :class:`Set`
objects are automatically copied to an :class:`ImmutableSet` before being added objects are automatically copied to an :class:`ImmutableSet` before being added
as a set element. as a set element.
The mechanism is to always add a hashable element, or if it is not hashable, the The mechanism is to always add a :term:`hashable` element, or if it is not
element is checked to see if it has an :meth:`__as_immutable__` method which hashable, the element is checked to see if it has an :meth:`__as_immutable__`
returns an immutable equivalent. method which returns an immutable equivalent.
Since :class:`Set` objects have a :meth:`__as_immutable__` method returning an Since :class:`Set` objects have a :meth:`__as_immutable__` method returning an
instance of :class:`ImmutableSet`, it is possible to construct sets of sets. instance of :class:`ImmutableSet`, it is possible to construct sets of sets.
......
...@@ -2191,8 +2191,8 @@ decimal arithmetic context. The specific types are not treated specially beyond ...@@ -2191,8 +2191,8 @@ decimal arithmetic context. The specific types are not treated specially beyond
their implementation of the context management protocol. See the their implementation of the context management protocol. See the
:mod:`contextlib` module for some examples. :mod:`contextlib` module for some examples.
Python's :term:`generator`\s and the ``contextlib.contextfactory`` decorator provide a Python's :term:`generator`\s and the ``contextlib.contextfactory`` :term:`decorator`
convenient way to implement these protocols. If a generator function is provide a convenient way to implement these protocols. If a generator function is
decorated with the ``contextlib.contextfactory`` decorator, it will return a decorated with the ``contextlib.contextfactory`` decorator, it will return a
context manager implementing the necessary :meth:`__enter__` and context manager implementing the necessary :meth:`__enter__` and
:meth:`__exit__` methods, rather than the iterator produced by an undecorated :meth:`__exit__` methods, rather than the iterator produced by an undecorated
......
...@@ -86,9 +86,9 @@ always available. ...@@ -86,9 +86,9 @@ always available.
If *value* is not ``None``, this function prints it to ``sys.stdout``, and saves If *value* is not ``None``, this function prints it to ``sys.stdout``, and saves
it in ``__builtin__._``. it in ``__builtin__._``.
``sys.displayhook`` is called on the result of evaluating an expression entered ``sys.displayhook`` is called on the result of evaluating an :term:`expression`
in an interactive Python session. The display of these values can be customized entered in an interactive Python session. The display of these values can be
by assigning another one-argument function to ``sys.displayhook``. customized by assigning another one-argument function to ``sys.displayhook``.
.. function:: excepthook(type, value, traceback) .. function:: excepthook(type, value, traceback)
...@@ -617,12 +617,12 @@ always available. ...@@ -617,12 +617,12 @@ always available.
File objects corresponding to the interpreter's standard input, output and error File objects corresponding to the interpreter's standard input, output and error
streams. ``stdin`` is used for all interpreter input except for scripts but streams. ``stdin`` is used for all interpreter input except for scripts but
including calls to :func:`input` and :func:`raw_input`. ``stdout`` is used for including calls to :func:`input` and :func:`raw_input`. ``stdout`` is used for
the output of :keyword:`print` and expression statements and for the prompts of the output of :keyword:`print` and :term:`expression` statements and for the
:func:`input` and :func:`raw_input`. The interpreter's own prompts and (almost prompts of :func:`input` and :func:`raw_input`. The interpreter's own prompts
all of) its error messages go to ``stderr``. ``stdout`` and ``stderr`` needn't and (almost all of) its error messages go to ``stderr``. ``stdout`` and
be built-in file objects: any object is acceptable as long as it has a ``stderr`` needn't be built-in file objects: any object is acceptable as long
:meth:`write` method that takes a string argument. (Changing these objects as it has a :meth:`write` method that takes a string argument. (Changing these
doesn't affect the standard I/O streams of processes executed by objects doesn't affect the standard I/O streams of processes executed by
:func:`os.popen`, :func:`os.system` or the :func:`exec\*` family of functions in :func:`os.popen`, :func:`os.system` or the :func:`exec\*` family of functions in
the :mod:`os` module.) the :mod:`os` module.)
......
...@@ -88,11 +88,12 @@ The module defines the following public class: ...@@ -88,11 +88,12 @@ The module defines the following public class:
.. note:: .. note::
By default, :meth:`timeit` temporarily turns off garbage collection during the By default, :meth:`timeit` temporarily turns off :term:`garbage collection`
timing. The advantage of this approach is that it makes independent timings during the timing. The advantage of this approach is that it makes
more comparable. This disadvantage is that GC may be an important component of independent timings more comparable. This disadvantage is that GC may be
the performance of the function being measured. If so, GC can be re-enabled as an important component of the performance of the function being measured.
the first statement in the *setup* string. For example:: If so, GC can be re-enabled as the first statement in the *setup* string.
For example::
timeit.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit() timeit.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()
......
...@@ -22,22 +22,22 @@ In the following, the term :dfn:`referent` means the object which is referred to ...@@ -22,22 +22,22 @@ In the following, the term :dfn:`referent` means the object which is referred to
by a weak reference. by a weak reference.
A weak reference to an object is not enough to keep the object alive: when the A weak reference to an object is not enough to keep the object alive: when the
only remaining references to a referent are weak references, garbage collection only remaining references to a referent are weak references,
is free to destroy the referent and reuse its memory for something else. A :term:`garbage collection` is free to destroy the referent and reuse its memory
primary use for weak references is to implement caches or mappings holding large for something else. A primary use for weak references is to implement caches or
objects, where it's desired that a large object not be kept alive solely because mappings holding large objects, where it's desired that a large object not be
it appears in a cache or mapping. For example, if you have a number of large kept alive solely because it appears in a cache or mapping. For example, if you
binary image objects, you may wish to associate a name with each. If you used a have a number of large binary image objects, you may wish to associate a name
Python dictionary to map names to images, or images to names, the image objects with each. If you used a Python dictionary to map names to images, or images to
would remain alive just because they appeared as values or keys in the names, the image objects would remain alive just because they appeared as values
dictionaries. The :class:`WeakKeyDictionary` and :class:`WeakValueDictionary` or keys in the dictionaries. The :class:`WeakKeyDictionary` and
classes supplied by the :mod:`weakref` module are an alternative, using weak :class:`WeakValueDictionary` classes supplied by the :mod:`weakref` module are
references to construct mappings that don't keep objects alive solely because an alternative, using weak references to construct mappings that don't keep
they appear in the mapping objects. If, for example, an image object is a value objects alive solely because they appear in the mapping objects. If, for
in a :class:`WeakValueDictionary`, then when the last remaining references to example, an image object is a value in a :class:`WeakValueDictionary`, then when
that image object are the weak references held by weak mappings, garbage the last remaining references to that image object are the weak references held
collection can reclaim the object, and its corresponding entries in weak by weak mappings, garbage collection can reclaim the object, and its
mappings are simply deleted. corresponding entries in weak mappings are simply deleted.
:class:`WeakKeyDictionary` and :class:`WeakValueDictionary` use weak references :class:`WeakKeyDictionary` and :class:`WeakValueDictionary` use weak references
in their implementation, setting up callback functions on the weak references in their implementation, setting up callback functions on the weak references
......
...@@ -428,7 +428,7 @@ when the function is called. ...@@ -428,7 +428,7 @@ when the function is called.
The function definition does not execute the function body; this gets executed The function definition does not execute the function body; this gets executed
only when the function is called. only when the function is called.
A function definition may be wrapped by one or more decorator expressions. A function definition may be wrapped by one or more :term:`decorator` expressions.
Decorator expressions are evaluated when the function is defined, in the scope Decorator expressions are evaluated when the function is defined, in the scope
that contains the function definition. The result must be a callable, which is that contains the function definition. The result must be a callable, which is
invoked with the function object as the only argument. The returned value is invoked with the function object as the only argument. The returned value is
......
...@@ -239,8 +239,8 @@ Weak References ...@@ -239,8 +239,8 @@ Weak References
=============== ===============
Python does automatic memory management (reference counting for most objects and Python does automatic memory management (reference counting for most objects and
garbage collection to eliminate cycles). The memory is freed shortly after the :term:`garbage collection` to eliminate cycles). The memory is freed shortly
last reference to it has been eliminated. after the last reference to it has been eliminated.
This approach works fine for most applications but occasionally there is a need This approach works fine for most applications but occasionally there is a need
to track objects only as long as they are being used by something else. to track objects only as long as they are being used by something else.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment