<p>您需要有一个对象的全局字典,并通过工厂函数(或自定义的<code>__new__</code>)获取它们,请参阅其他答案)。另外,考虑使用<a href="http://docs.python.org/2/library/weakref.html#weakref.WeakValueDictionary" rel="nofollow">^{<cd2>}</a>,这样就不会不必要地用不再需要的对象填满内存。在</p>
<pre><code>from weakref import WeakValueDictionary
class _Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
# Cache of Point objects the program currently uses
_points = WeakValueDictionary()
def Point(x, y):
"""Create a Point object"""
# Note that this is a function (a "factory function")
# You can also override Point.__new__ instead
try:
return _points[x, y]
except KeyError:
_points[x, y] = point = _Point(x, y)
return point
if __name__ == '__main__':
# A basic demo
print Point(1, 2)
print id(Point(1, 2))
print Point(2, 3) == Point(2, 3)
pt_2_3 = Point(2, 3)
# The Point(1, 2) we created earlier is not needed any more.
# In current CPython, it will have been been garbage collected by now
# (but note that Python makes no guarantees about when objects are deleted)
# If we create a new Point(1, 2), it should get a different id
print id(Point(1, 2))
</code></pre>
<p>请注意,namedtuple不能与WeakValueDictionary一起使用。在</p>