+ 3
How list is inserted into memory?
list = ['xyz'] del list print(list) #output <class 'list'> print(type(list)) #output <class 'type'> print([list].append(5)) #output None a = 5 del a print(a) #output error 'a' not defined After deleting the list why python can still recognise it whereas python can not recognise the variable after deleting. Also when I did list.append(5) it shows error but [list].append(5) doesn’t show error. Can someone help me with good tutorial/articles where these things are discussed in details?
4 Réponses
+ 7
Python should not allow builtIn types as variable names.
+ 6
Try to use another name, not 'list', you will get the same error message as you did when you delete <a>.
list = ['xyz']
* Here you define a variable named <list>.
del list
* You delete the variable
print(list) #output <class 'list'>
* You print the type of `list`, it is a class
print(type(list)) #output <class 'type'>
* You print the type of the `list` class. In Python, all types are classes. A class is a type. Confused? so am I XD
print([list].append(5)) #output None
* append method of the `list` class returns nothing. It appends the argument to the object directly, not returning new object with the newly added value.
+ 5
Thank you Ipang, Oma Falk, Theophile. Thanks for making it clear ^_^
+ 3
Well there is a reason. "list" is part of the "__builtins__" module.
When you do :
list = [1, 2, 3]
You create a variable with the same name as the built-in type, but you do not replace it. Thus, if you do :
print(globals())
# {'list' : [1, 2, 3], '__builtins__' : <module 'builtins' (built-in)>}
The original 'list' variable is still part of the 'builtins' module.
When doing :
del list
You delete the first variable it finds in the global dict (and that's your [1, 2, 3] list).
After that :
print(list)
Python does not find any reference to "list" directly in the global dict, so it checks automatically the' builtins' module, and find the original list variable.