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

Skip-gram model and negative sampling

In the previous post , we have seen the 3 word2vec models: skip-gram, CBOW and GloVe. Now let's have a look at negative sampling and what it is used to make training skip-gram faster. The idea is originated from this paper: " Distributed Representations of Words and Phrases and their Compositionality ” (Mikolov et al. 2013) In the previous example , we have seen that if we have a vocabulary of size 10K, and we want to train word vectors of size 300. Then the number of parameters we have to estimate in each layer is 10Kx300. This number is big and makes training prone to over-fitting and gives too much focus on words that appear often, and less focus on rare words. Subsampling of frequent words So the idea of subsampling is that: we try to maximize the probability that "real outside word" appears, and minimize the probability that "random words" appear around center word. Real outside words are words that characterize the meaning of the center word, wh

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