This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: List a = []*19 doesn't create a list with index length of 19
Type: behavior Stage: resolved
Components: Versions: Python 3.6
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: eric.smith, paul.moore, scoder, steve.dower, tim.golden, varada86, zach.ware
Priority: normal Keywords:

Created on 2018-06-09 17:44 by varada86, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (6)
msg319163 - (view) Author: Varada (varada86) Date: 2018-06-09 17:44
Hi,
As per my understanding, 
a = [0]*19 -> creates a list of length 19 with all zeros,

>>> a = [0]*19
>>> print (len(a))
19
>>> a [18] = 2
>>> print (a)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
>>>

In the similar way, 
>>> a = []*19 --> Must create a blank list with length 19. 
That is eventhough the contents of the list would be blank or null, I would at least expect the length of the list must 19 and the index must have got memory allocated so I can access it later ?

Otherwise, if a = []*19 is going to return length as 0, and it's index cannot be accessed then what difference does it have with a = []. Aren't they the same ? There should be some significance of using a = []*19 compared to a = []. They cant the the same, can they ?

>>> a = []*19
>>> a [18] = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> print (len(a))
0
>>>
>>> b = []
>>> print (len(b))
0
>>> b [18] = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>>

-----
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
msg319165 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2018-06-09 17:52
Nothing (or 0, or an empty list, string or tuple, etc.) multiplied by any positive whole number is still nothing.
msg319168 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2018-06-09 18:16
To elaborate on Zach's comment:

Notice that your first example repeats 0 19 times. The second example repeats nothing 19 times.

If you first example returned a list with [0] repeated 19 (that is: [[0], [0], [0], ..., [0]]), then you're correct the second example should produce a list of 19 empty lists. But that's not the case here.
msg319170 - (view) Author: Varada (varada86) Date: 2018-06-09 18:43
Hi, Eric & Zach,

Thanks for your kind response. 

@Eric, from your comments am I to understand that you agree with me or state that my understanding is wrong ? :) I couldn't conclude it. 

The point where I find difficult to convince myself is why am I not able to access a[18] when I have already kind of declared it like a = []*19.

Is that really an expected behavior.

I agree with Zak, that nothing * anything = nothing. But, in that case why we even allow that command to work. 

It leads us think that it will create an empty list 19 times whereas it actually doesn't. It's kind of misleading don't you think. 

Many Thanks in advance Eric and Zak for your time on this,
msg319172 - (view) Author: Stefan Behnel (scoder) * (Python committer) Date: 2018-06-09 19:14
You misunderstood what the code is doing, and the response that you got indicates that the bug tracker is not the right place to discuss this misunderstanding. If you want to discuss this further, please ask on the Python mailing list (python-list@python.org).
msg319173 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2018-06-09 19:35
Agreed with Stefan about this not being appropriate for the bug tracker.

And I'm saying that I don't agree with you. There's no bug here.
History
Date User Action Args
2022-04-11 14:59:01adminsetgithub: 77996
2018-06-09 19:35:04eric.smithsetmessages: + msg319173
2018-06-09 19:14:56scodersetnosy: + scoder
messages: + msg319172
2018-06-09 18:43:42varada86setmessages: + msg319170
2018-06-09 18:16:21eric.smithsetnosy: + eric.smith
messages: + msg319168
2018-06-09 17:52:41zach.waresetcomponents: - Windows
2018-06-09 17:52:30zach.waresetstatus: open -> closed
resolution: not a bug
messages: + msg319165

stage: resolved
2018-06-09 17:44:10varada86create