On Saturday, May 10, 2014 6:31:49 AM UTC+5:30, Steven D'Aprano wrote: > On Sat, 10 May 2014 01:34:58 +0300, Marko Rauhamaa wrote:
> > > and you can't pass references to them. > > > That at least you have got right. > And that's Marko's main point > > > > Right, Python's variables aren't like variables in C. Rather, Python's > > variables are like CPU registers. They cannot hold typed or structured > > objects > > > Surely you cannot mean that? It is *trivially simple* to disprove that > statement: > > > py> x = [1, 2, 3] # A structured object > py> type(x) # that has a type > <class 'list'> You missed the 'hold' For me, Marko's comment that variables in python are not first-class whereas in C they are is for me the most important distinction Ive seen (in a long time of seeing these discussions). In C a pointer is a 'pre-variable' in this sense: int i, *p; p = &i after this i and *p are completely interchangeable However p can also refer to -- (contain?hold?) depends on which side of this debate you are -- an element of an array or struct p = &some_array[some_index] p = &some_struct.some_field And all the way to anonymity with p = malloc(sizeof(*p)) This is what makes p a kind of meta-variable: - it can 'contain' other variables - it can contain variale-ish things like array elements - it can contain new variables on the fly via malloc These possibilities dont exist in python -- https://mail.python.org/mailman/listinfo/python-list