Skip to main content

Crazy Python pointer

It took me ~1 hour to find a silly bug because of the "call-by-value" thing in python:


>> a = b = {}
>> a[0] = 1
>> print a
{0:1}
>>b[0] = 9
>> print a
{0:9}
>> print id(a)
4297396640
>> print id(b)
4297396640


When you change the value of a copied variable, the formal one changes, too.

So yes, as it is confusing usually how parameters are passed in different programming languages. What happens when a variable is passed and whether its value will be changed or not.

In python, a variable actually holds a reference (pointer, address) of an object. When the variable is passed as a parameter, its value is copied into the formal parameter variable.

>>x = 1
>>print id(x)
39030144
>>def f(x):
>> print id(x)
39030144
>> x = 2
>> print id(x)
39030132


>>f(x)
>>print x
1

Comments

Popular posts from this blog

Python Tkinter: Changing background images using key press

Let's write a simple Python application that changes its background image everytime you click on it. Here is a short code that helps you do that: import os, sys import Tkinter import Image, ImageTk def key(event): print "pressed", repr(event.char) event.widget.quit() root = Tkinter.Tk() root.bind_all(' ', key) root.geometry('+%d+%d' % (100,100)) dirlist = os.listdir('.') old_label_image = None for f in dirlist: try: image1 = Image.open(f) root.geometry('%dx%d' % (image1.size[0],image1.size[1])) tkpi = ImageTk.PhotoImage(image1) label_image = Tkinter.Label(root, image=tkpi) label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1]) root.title(f) if old_label_image is not None: old_label_image.destroy() old_label_image = label_image root.mainloop() # wait until user clicks the window except Exception, e: # Skip a...

Spam and Bayes' theorem

I divide my email into three categories: A1 = spam. A2 = low priority, A3 = high priority. I find that: P(A1) = .7 P(A2) = .2 P(A3) = .1 Let B be the event that an email contains the word "free". P(B|A1) = .9 P(B|A2) = .01 P(B|A3) = .01 I receive an email with the word "free". What is the probability that it is spam?

Pytorch and Keras cheat sheets