Instruction
This activity builds on the code you wrote for the first milestone, which shows an apparent inconsistency in the behavior of Python variables.
- The key in this activity will be to use the id() function to compare the unique ID numbers of all the variables as you create and change them.
Write code to try to prove whether the container model or the label model best describes the behavior of variables in Python. Again, using the id() function is key.
State your understanding of how Python variables work in a few sentences.
Variable types: int, float, string, list, tuple and dictionary
1 - Integer (int)
# Creating the int
x = 25 # x is a label and 25 is a object / variables are labels which can be attached to objects in memory.
# Creating a second variable int equal to the first
y = x # y is a label and x is a object and so object and label are value.
# Printing
print(x, y)
print(id(x))
print(id(y))
print( "x and y are actually referring to the same object 25 \n")
# Changing the second int variable
x = [10, 20, 30] # here we are building a new object for x
print(f'value of x: {x} ID of x: {id(x)}')
print(f'value of x[0]: {x[0]} ID of x: {id(x[0])}')
print(f'value of x[1]: {x[1]} ID of x: {id(x[1])}')
print(f'value of x[2]: {x[2]} ID of x: {id(x[2])}')
print("x is referring to the different object ")
25 25
140722122981664
140722122981664
x and y are actually referring to the same object 25
value of x: [10, 20, 30] ID of x: 2413390684744
value of x[0]: 10 ID of x: 140722122981184
value of x[1]: 20 ID of x: 140722122981504
value of x[2]: 30 ID of x: 140722122981824
x is referring to the different object
2 - Float¶
x = 25.25
y = x
print(id(x))
print(id(y))
x = [10.2 , 20.3 , 30.25]
print(f'value of x: {x} ID of x: {id(x)}')
1623312278128
1623312278128
value of x: [10.2, 20.3, 30.25] ID of x: 1623318028872
3 - String
a = "name"
b = a
print(id(a))
print(id(b))
b = ["Mary"," Paty", "Ale"]
print(f' value of b: {b} ID of b: {id(b)}')
2809672297080
2809672297080
value of b: ['Mary', ' Paty', 'Ale'] ID of b: 2809675473480
4 - List
# Creating the List
List1 = [1, 5.2, 9, 12, 24, 33]
# Creating a second variable List equal to the first
List2 = List1
# Printing
print(id(List1))
print(id(List2))
# Changing the second List variable
List2 = [1968,"car","model" ]
# Printing
print(f"Value of List1: {List1} ID of List1: {id(List1)}")
print(f"Value of List2: {List2} ID of List2: {id(List2)}")
print(f"Value of List2[1]: {List2[1]} ID of List2[1]: {id(List2[1])}")
1607352017416
1607352017416
Value of List1: [1, 5.2, 9, 12, 24, 33] ID of List1: 1607352017416
Value of List2: [1968, 'car', 'model'] ID of List2: 1607353853448
Value of List2[1]: car ID of List2[1]: 1607356795344
5 - Tuple
# Creating a variable tuple
tuple1 = (57, "birthday", 1964, "weight",[1965, 1964, 1963])
# Creating a second variable tuple equal to the first
tuple2 = tuple1
# printing
print(id(tuple1))
print(id(tuple2))
print ('Tuple is immutable variable')
# 1.3) Changing the second variable
tuple2[3] = 89
2227975185864
2227975185864
Tuple is immutable variable
Traceback (most recent call last):
File "C:\Users\elida\AppData\Local\Temp\RtmpeCebJC\chunk-code-51c46cb57a4.txt", line 14, in <module>
tuple2[3] = 89
TypeError: 'tuple' object does not support item assignment
# Creating a variable tuple
tuple1 = (57, "birthday", 1964, "weight",[1965, 1964, 1963])
# Creating a second variable tuple equal to the first
tuple2 = tuple1
# printing
print(id(tuple1))
print(id(tuple2))
print ('Tuple is immutable variable')
# 1.3) Changing the second variable
tuple2 = (2.0, "name", "whatever")
print(f"Value of tupl2[1]: {tuple2[1]} ID of tuple2[1]: {id(tuple2[1])}")
2957102441928
2957102441928
Tuple is immutable variable
Value of tupl2[1]: name ID of tuple2[1]: 2957095725688
6 - Dictionary
# Creating the dictionary
Dict1 = {"key1": 1, "key2": "2", "key3": [3, 3, 3], "key4": "quatro"}
# Creating a second variable dictionay equal to the first
Dict2 = Dict1
# Printing
print(id(Dict1))
print(id(Dict2))
# Changing the second dictionay variable
Dict2["key1"] = "new value" # here we are building a new object. Append value with key into dictionary
print(f'Value of Dict2["key1"]: {Dict2["key1"]} ID of Dict2["key1"]: {id(Dict2["key1"])}')
2527809877984
2527809877984
Value of Dict2["key1"]: new value ID of Dict2["key1"]: 2527811233712
Conclusion:
Python is a programming language that supports OOP. The variables are labels which can be attached to objects in memory, wherever they are.
LS0tDQp0aXRsZTogIkxhYmVscyBhbmQgQ29udGFpbmVycyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KIyMjIEluc3RydWN0aW9uDQoNCiAxLiBUaGlzIGFjdGl2aXR5IGJ1aWxkcyBvbiB0aGUgY29kZSB5b3Ugd3JvdGUgZm9yIHRoZSBmaXJzdCBtaWxlc3RvbmUsIHdoaWNoIHNob3dzIGFuIGFwcGFyZW50IGluY29uc2lzdGVuY3kgaW4gdGhlIA0KYmVoYXZpb3Igb2YgUHl0aG9uIHZhcmlhYmxlcy4NCg0KICAgIC0gVGhlIGtleSBpbiB0aGlzIGFjdGl2aXR5IHdpbGwgYmUgdG8gdXNlIHRoZSBpZCgpIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdGhlIHVuaXF1ZSBJRCBudW1iZXJzIG9mIGFsbCB0aGUgdmFyaWFibGVzDQogICAgYXMgeW91IGNyZWF0ZSBhbmQgY2hhbmdlIHRoZW0uDQoNCjIuIFdyaXRlIGNvZGUgdG8gdHJ5IHRvIHByb3ZlIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBtb2RlbCBvciB0aGUgbGFiZWwgbW9kZWwgYmVzdCBkZXNjcmliZXMgdGhlIGJlaGF2aW9yIG9mIHZhcmlhYmxlcw0KaW4gUHl0aG9uLiBBZ2FpbiwgdXNpbmcgdGhlIGlkKCkgZnVuY3Rpb24gaXMga2V5Lg0KDQozLiBTdGF0ZSB5b3VyIHVuZGVyc3RhbmRpbmcgb2YgaG93IFB5dGhvbiB2YXJpYWJsZXMgd29yayBpbiBhIGZldyBzZW50ZW5jZXMuDQoNCjQuIFZhcmlhYmxlIHR5cGVzOiBpbnQsIGZsb2F0LCBzdHJpbmcsIGxpc3QsIHR1cGxlIGFuZCBkaWN0aW9uYXJ5DQoNCiMjIyAxIC0gSW50ZWdlciAoaW50KQ0KDQpgYGB7cHl0aG9ufQ0KIyBDcmVhdGluZyB0aGUgaW50DQp4ID0gMjUgICMgeCBpcyBhIGxhYmVsIGFuZCAyNSBpcyBhIG9iamVjdCAvIHZhcmlhYmxlcyBhcmUgbGFiZWxzIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBvYmplY3RzIGluIG1lbW9yeS4NCg0KIyBDcmVhdGluZyBhIHNlY29uZCB2YXJpYWJsZSBpbnQgZXF1YWwgdG8gdGhlIGZpcnN0DQp5ID0geCAgIyB5IGlzIGEgbGFiZWwgYW5kIHggaXMgYSBvYmplY3QgYW5kIHNvIG9iamVjdCBhbmQgbGFiZWwgYXJlIHZhbHVlLg0KDQojIFByaW50aW5nDQpwcmludCh4LCB5KQ0KcHJpbnQoaWQoeCkpDQpwcmludChpZCh5KSkNCnByaW50KCAieCBhbmQgeSBhcmUgYWN0dWFsbHkgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIG9iamVjdCAyNSBcbiIpDQoNCiMgQ2hhbmdpbmcgdGhlIHNlY29uZCBpbnQgdmFyaWFibGUNCnggPSBbMTAsIDIwLCAzMF0gICMgaGVyZSB3ZSBhcmUgYnVpbGRpbmcgYSBuZXcgb2JqZWN0IGZvciB4DQoNCnByaW50KGYndmFsdWUgb2YgeDoge3h9IElEIG9mIHg6IHtpZCh4KX0nKQ0KcHJpbnQoZid2YWx1ZSBvZiB4WzBdOiB7eFswXX0gSUQgb2YgeDoge2lkKHhbMF0pfScpDQpwcmludChmJ3ZhbHVlIG9mIHhbMV06IHt4WzFdfSBJRCBvZiB4OiB7aWQoeFsxXSl9JykNCnByaW50KGYndmFsdWUgb2YgeFsyXToge3hbMl19IElEIG9mIHg6IHtpZCh4WzJdKX0nKQ0KcHJpbnQoInggaXMgcmVmZXJyaW5nIHRvIHRoZSBkaWZmZXJlbnQgb2JqZWN0ICIpDQpgYGANCg0KIyMjIDIgLSBGbG9hdMK2DQoNCmBgYHtweXRob259DQp4ID0gMjUuMjUNCnkgPSB4DQoNCnByaW50KGlkKHgpKQ0KcHJpbnQoaWQoeSkpDQoNCnggPSBbMTAuMiAsIDIwLjMgLCAzMC4yNV0NCnByaW50KGYndmFsdWUgb2YgeDoge3h9IElEIG9mIHg6IHtpZCh4KX0nKSANCmBgYA0KDQojIyMgMyAtIFN0cmluZw0KDQpgYGB7cHl0aG9ufQ0KYSA9ICJuYW1lIg0KYiA9IGENCg0KcHJpbnQoaWQoYSkpDQpwcmludChpZChiKSkNCg0KYiA9IFsiTWFyeSIsIiBQYXR5IiwgIkFsZSJdDQpwcmludChmJyB2YWx1ZSBvZiBiOiB7Yn0gSUQgb2YgYjoge2lkKGIpfScpDQpgYGANCg0KIyMjIDQgLSBMaXN0DQoNCmBgYHtweXRob259DQojIENyZWF0aW5nIHRoZSBMaXN0DQpMaXN0MSA9ICBbMSwgNS4yLCA5LCAxMiwgMjQsIDMzXQ0KDQojIENyZWF0aW5nIGEgc2Vjb25kIHZhcmlhYmxlIExpc3QgZXF1YWwgdG8gdGhlIGZpcnN0DQpMaXN0MiA9IExpc3QxIA0KDQojIFByaW50aW5nDQpwcmludChpZChMaXN0MSkpDQpwcmludChpZChMaXN0MikpDQoNCiMgQ2hhbmdpbmcgdGhlIHNlY29uZCBMaXN0IHZhcmlhYmxlDQpMaXN0MiA9IFsxOTY4LCJjYXIiLCJtb2RlbCIgXQ0KDQojIFByaW50aW5nDQpwcmludChmIlZhbHVlIG9mIExpc3QxOiB7TGlzdDF9IElEIG9mIExpc3QxOiB7aWQoTGlzdDEpfSIpDQpwcmludChmIlZhbHVlIG9mIExpc3QyOiB7TGlzdDJ9IElEIG9mIExpc3QyOiB7aWQoTGlzdDIpfSIpDQpwcmludChmIlZhbHVlIG9mIExpc3QyWzFdOiB7TGlzdDJbMV19IElEIG9mIExpc3QyWzFdOiB7aWQoTGlzdDJbMV0pfSIpDQoNCmBgYA0KDQojIyMgNSAtIFR1cGxlDQoNCmBgYHtweXRob259DQojIENyZWF0aW5nIGEgdmFyaWFibGUgdHVwbGUNCnR1cGxlMSA9ICg1NywgImJpcnRoZGF5IiwgMTk2NCwgIndlaWdodCIsWzE5NjUsIDE5NjQsIDE5NjNdKQ0KDQojIENyZWF0aW5nIGEgc2Vjb25kIHZhcmlhYmxlIHR1cGxlIGVxdWFsIHRvIHRoZSBmaXJzdA0KdHVwbGUyID0gdHVwbGUxDQoNCiMgcHJpbnRpbmcNCnByaW50KGlkKHR1cGxlMSkpDQpwcmludChpZCh0dXBsZTIpKQ0KDQpwcmludCAoJ1R1cGxlIGlzIGltbXV0YWJsZSB2YXJpYWJsZScpDQoNCiMgMS4zKSBDaGFuZ2luZyB0aGUgc2Vjb25kIHZhcmlhYmxlDQp0dXBsZTJbM10gPSA4OQ0KDQpgYGANCg0KYGBge3B5dGhvbn0NCiMgQ3JlYXRpbmcgYSB2YXJpYWJsZSB0dXBsZQ0KdHVwbGUxID0gKDU3LCAiYmlydGhkYXkiLCAxOTY0LCAid2VpZ2h0IixbMTk2NSwgMTk2NCwgMTk2M10pDQoNCiMgQ3JlYXRpbmcgYSBzZWNvbmQgdmFyaWFibGUgdHVwbGUgZXF1YWwgdG8gdGhlIGZpcnN0DQp0dXBsZTIgPSB0dXBsZTENCg0KIyBwcmludGluZw0KcHJpbnQoaWQodHVwbGUxKSkNCnByaW50KGlkKHR1cGxlMikpDQoNCnByaW50ICgnVHVwbGUgaXMgaW1tdXRhYmxlIHZhcmlhYmxlJykNCg0KIyAxLjMpIENoYW5naW5nIHRoZSBzZWNvbmQgdmFyaWFibGUNCnR1cGxlMiA9ICgyLjAsICJuYW1lIiwgIndoYXRldmVyIikNCnByaW50KGYiVmFsdWUgb2YgdHVwbDJbMV06IHt0dXBsZTJbMV19IElEIG9mIHR1cGxlMlsxXToge2lkKHR1cGxlMlsxXSl9IikNCmBgYA0KDQojIyMgNiAtIERpY3Rpb25hcnkNCg0KYGBge3B5dGhvbn0NCiMgQ3JlYXRpbmcgdGhlIGRpY3Rpb25hcnkNCkRpY3QxID0geyJrZXkxIjogMSwgImtleTIiOiAiMiIsICJrZXkzIjogWzMsIDMsIDNdLCAia2V5NCI6ICJxdWF0cm8ifQ0KDQojIENyZWF0aW5nIGEgc2Vjb25kIHZhcmlhYmxlIGRpY3Rpb25heSBlcXVhbCB0byB0aGUgZmlyc3QNCkRpY3QyID0gRGljdDENCg0KIyBQcmludGluZw0KcHJpbnQoaWQoRGljdDEpKQ0KcHJpbnQoaWQoRGljdDIpKQ0KDQojIENoYW5naW5nIHRoZSBzZWNvbmQgZGljdGlvbmF5IHZhcmlhYmxlDQpEaWN0Mlsia2V5MSJdID0gIm5ldyB2YWx1ZSIgIyBoZXJlIHdlIGFyZSBidWlsZGluZyBhIG5ldyBvYmplY3QuIEFwcGVuZCB2YWx1ZSB3aXRoIGtleSBpbnRvIGRpY3Rpb25hcnkNCg0KcHJpbnQoZidWYWx1ZSBvZiBEaWN0Mlsia2V5MSJdOiB7RGljdDJbImtleTEiXX0gSUQgb2YgRGljdDJbImtleTEiXToge2lkKERpY3QyWyJrZXkxIl0pfScpDQpgYGANCg0KIyMjIENvbmNsdXNpb246DQojIyMjIFB5dGhvbiBpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3VwcG9ydHMgT09QLiBUaGUgdmFyaWFibGVzIGFyZSBsYWJlbHMgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIG9iamVjdHMgaW4gbWVtb3J5LCB3aGVyZXZlciB0aGV5IGFyZS4NCg0KDQoNCg==