Thank you all.

I think I get the gist of what happens now.

Really appreciating all of the effort you guys put into helping people
on this list!

Chris

On Sat, Sep 17, 2011 at 4:17 PM, Anthony <abasta...@gmail.com> wrote:
> Also, note that your 'results' dict will only persist for the duration of a
> single request. Each request is handled by a new thread (from a thread
> pool).
> Anthony
>
> On Saturday, September 17, 2011 11:06:14 AM UTC-4, Massimo Di Pierro wrote:
>>
>> On Sep 17, 6:31 am, Chris Rowson <christop...@gmail.com> wrote:
>> > Hi folks,
>> >
>> > I'm trying to get my head around what happens to data stored in memory
>> > when
>> > it isn't needed anymore.
>> >
>> > Let me give you an example. Let's say I create a function which returns
>> > a
>> > dict called 'results' populated with data from an external source each
>> > time
>> > a user registers (for instance let's say it has data returned from
>> > geocoding
>> > the users postcode and providing info about the area).
>> >
>> > So the 'results' dict holds that data, it is used, and then what? Is the
>> > memory automatically freed up again when we finish with the data or does
>> > it
>> > hang around in memory?
>>
>> Yes. Python uses reference counting. Every variable is a pointer to a
>> memory location. It keeps tracks of how many pointers point to the
>> same location.
>>
>> a = A() # one pointer
>> b = a # two pointers
>> c = a # three pointers
>>
>> when you delete one the counter is decreased
>>
>> b = 4 # now two variables (a,c) point to A()
>>
>> when the counter is zero the object is freed.
>>
>> This works great UNLESS the objects have circular references (a.x=a)
>> AND the object has a destructor (A.__del__). As long a you do not use
>> destructors (who needs them?) everything works great.
>>
>>
>>
>>
>

Reply via email to