Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
19 / 10 / 6
Регистрация: 28.05.2014
Сообщений: 140

Странное поведение при работе с массивами

14.04.2015, 19:46. Показов 817. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть код -

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from tkinter import Tk, Canvas
 
arr = [[0]*10]*10
print(arr)
 
def click(e):
    x = int(e.x/10)
    y = int(e.x/10)
 
    arr[y][x] = arr[y][x] + 1
 
    print(arr)
    draw()
 
def draw():
    for x in range(10):
        for y in range(10):
            if arr[y][x] == 0:
                color = 'black'
 
            else:
                color = 'green'
 
            canv.create_rectangle(x*10, y*10, x*10+10, y*10+10, fill = color)
 
root = Tk()
canv = Canvas(root, width = 100, height = 100, bg = 'black')
 
canv.pack()
root.bind('<Button-1>', click)
root.mainloop()


Идея в том, что бы при нажатии на клетку ее значение менялось на противоположное. При выполнении кода выше меняется значение не одной клетки, а всего столбца. С чем это связанно понять не могу. Помогите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2015, 19:46
Ответы с готовыми решениями:

Странное поведение с пробелом при работе с API VK
Всем привет! У меня следующий головняк... пишу приложение, которое будет отправлять мне сообщение в ВК. Изучил API ВК написал функцию,...

Странное поведение при работе с List Box
Здравствуйте! Столкнулась со странной проблемой... Пишу программу, которая при выборе файла, скидывает путь к файлу в вектор, при условии...

Странное поведение media при работе с Unyson
Уважаемые знатоки, помогите пожалуйста новичку, я пытаюсь создать свою первую тему на wp, делаю это по гайду, при помощи фреймворка unyson....

3
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.04.2015, 20:04
Строку 3, поменяй на
Python
1
[[0 for _ in range(10)] for _ in range(10)]
Цитата Сообщение от rennnorb Посмотреть сообщение
Странное поведение при работе с массивами
Массивами, тут даже не пахнет, тут только списки.

Цитата Сообщение от rennnorb Посмотреть сообщение
Странное поведение
Ничего странного, просто нужно мат часть подтянуть. Почитай в книге Марк Лутц - Изучаем Python (4-е изд. 2011) на странице 201 про "Разделяемые ссылки и изменяемые объекты".
1
19 / 10 / 6
Регистрация: 28.05.2014
Сообщений: 140
14.04.2015, 20:06  [ТС]
Заработало, спасибо.
Цитата Сообщение от alex925 Посмотреть сообщение
Массивами, тут даже не пахнет, тут только списки.
Простите, привычка.
Просто интересно, а чем ваша запись отличается от моей?

Кликните здесь для просмотра всего текста

>>> a = [[0 for _ in range(10)] for _ in range(10)]
>>> for i in a:
... i
...
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> a = [[0]*10]*10
>>> for i in a:
... i
...
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.04.2015, 20:12
Да, все очень просто. Я создал 10 разных объектов списка, а ты создал 1 объект списка, а остальные 9 объектов это ссылки на первый. По этому у тебя меняется оригинальный список и изменения видны во всех ссылках.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> for i in [[0] * 10] * 10:
...     print(id(i))
... 
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
139754934724296
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> for i in [[0 for _ in range(10)] for _ in range(10)]:
...     print(id(i))
... 
139754934681224
139754934725384
139754934725320
139754934725256
139754934725192
139754934724744
139754934724360
139754934725448
139754934726600
139754934739016
Ну, тут как говорится найди 10 отличий.

id(object) - Возвращает "адрес" объекта. Это целое число, которое гарантированно будет уникальным и постоянным для данного объекта в течение срока его существования.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2015, 20:12
Помогаю со студенческими работами здесь

Странное поведение сервера при работе скрипта
Всем доброго, проблема такова: Я работаю со сборкой сервера XAMPP, у апача порты стандартные: 80,443 Есть скрипт загружающий файл...

Странное поведение COM порта при работе приложения
Добрый день! Возникла странная проблема при работе с COM портом. Имеется девайс, который принимает запросы и отправляет ответы на них...

Странное поведение форм при работе через RemoteApp
Всем привет! Пишу на C++ Builder Berlin Пишу приложение с некоторым количеством форм. При отладке никаких проблем с формами не...

Странное поведение при работе со строками: почему программа выводит 8, если в input "МАКС"?
Почему программа выводит 8, если в input: &quot;МАКС&quot;? #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;string.h&gt; using...

Странное поведение при отладке
Здравствуйте. Решил написать небольшую тулзу и столкнулся с проблемой: скомпилированный код прекрасно работает в отладчике, однако не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru