p97 Variables are storing references to the computer memory locations.
"""Variables as references
When you assign a value to a variable, you are creating that value
in computer memory, and store a reference to it
When you assign new value to a, reference to a doesn't affect b

a = 42; b = a; a = 100

assert a == 100
assert b == 42

print('Tests passed')


When you copy a list, you are copying the list (because lists are mutable).
""" References are different with lists
Lists are mutable
Even the code touches only A list ...
both A and B are changed!
Values stored in A and B both refer to the same list

A = [1, 2, 3]; B = A; A[1] = 'x'

assert A == [1, 'x', 3]
assert B == [1, 'x', 3]

print('Test passed')


p100 Python makes automatic garbage collection.
"""Python's automatic garbage collection
Delete any values not being referred to by any variables
Manual memory management in other programming languages ...
is a common source of bugs.
The getrefcount function returns the number of references

import sys

a = 'somevalue'
assert sys.getrefcount(a) == 4
assert sys.getrefcount('somevalue') == 4

b = a; c = b
assert sys.getrefcount(a) == 6

del a; del b; del c
assert sys.getrefcount('somevalue') == 3 # Look Here

print('Tests passed')

Last update: 117 days ago