Найти - Пользователи
Полная версия: Принцип заполнения списка
Начало » Python для новичков » Принцип заполнения списка
1
did.vasiliy
Добрый день!
Прошу объяснить причину разных решений, по сути одного кода.
 import random
A=[[0,0],[0,0],[0,0]]
print(A)
for i in range(len(A)):
    x1=random.randint(1,12)
    x2=random.randint(1,12)  
    A[i][0]=x1
    A[i][1]=x2
print(A)
[[0, 0], [0, 0], [0, 0]]
[[5, 6], [11, 11], [5, 1]]
 import random
A=[[0,0]]*3
print(A)
for i in range(len(A)):
    x1=random.randint(1,12)
    x2=random.randint(1,12)
    A[i][0]=x1
    A[i][1]=x2
print(A)
[[0, 0], [0, 0], [0, 0]]
[[2, 9], [2, 9], [2, 9]]
dredsss
Оба кода работают одинакого, просто тебе очень повезло и выпало 2, 9 во всех массивах
Код
 [[0, 0]] * 3
Тоже, что и
 [[0,0]] + [[0,0]] + [[0,0]]
При сложении массивов они объединяются в 1, складываю только свои элементы, поэтому
  >> [[0,0]] + [[0,0]] + [[0,0]] == [[0, 0]] * 3
True
 >>> [[0,0]] + [[0,0]] + [[0,0]]
[[0, 0], [0, 0], [0, 0]]
Slow
во втором случае у вас в A три раза лежит один и тот же список, в чем вы можете убедиться сами -
a = [[0,0]] * 3
id(a[0]) == id(a[1])
или
a[0] is a[1]
Slow
dredsss
Оба кода работают одинакого, просто тебе очень повезло и выпало 2, 9 во всех массивахКод
Вы совершенно не правы
did.vasiliy
т.е создавая список способоми: А=[,] и A=[]*2 я получаю два разных списка по сути, по причине ссылочного принципа организации списка?
did.vasiliy
Slow
во втором случае у вас в A три раза лежит один и тот же список, в чем вы можете убедиться сами -

Спасибо!
 >>> A=[[0,0]]*3
>>> id(A[0]) == id(A[1])
True
>>> A=[[0,0],[0,0]]
>>> id(A[0]) == id(A[1])
False
>>>
dredsss
Slow
После переопределения одного из элементов, его ИД изменится. Для экономии памяти питон и не на это способен
 >> a = 1
>> b = 1
>> c = 1
>> d = 1
>> id(a) == id(b) == id(c) == id(d)
True
Slow
dredsss
кхм.
cpython особым образом работает с int. настоятельно рекомендую изучить вопрос, прежде чем делать не относящиеся к делу заявления.
dredsss
Slow
CPython - немного не python.
Я нормально знаю то, почему id одинаковый у одинаковых int'ов. Разве я кинул этот ответ в топик CPython?
Papa_Svin
dredsss
CPython - немного не python
Да????? А что это???

CPython — наиболее распространённая, де-факто эталонная реализация языка программирования Python. CPython является интерпретатором байт-кода, написан на C.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB