Попытка объяснить это более описательно,
Операция 1:
x = [[0, 0], [0, 0]]
print(type(x)) # <class 'list'>
print(x) # [[0, 0], [0, 0]]
x[0][0] = 1
print(x) # [[1, 0], [0, 0]]
Операция 2:
y = [[0] * 2] * 2
print(type(y)) # <class 'list'>
print(y) # [[0, 0], [0, 0]]
y[0][0] = 1
print(y) # [[1, 0], [1, 0]]
Заметил, почему не изменяется первый элемент первого списка не изменил второй элемент каждого списка? Это потому, что [0] * 2
действительно представляет собой список из двух чисел, и ссылка на 0 не может быть изменена.
Если вы хотите создать копии клонов, попробуйте выполнить операцию 3:
import copy
y = [0] * 2
print(y) # [0, 0]
y = [y, copy.deepcopy(y)]
print(y) # [[0, 0], [0, 0]]
y[0][0] = 1
print(y) # [[1, 0], [0, 0]]
еще один интересный способ создания копий клонов, операция 4:
import copy
y = [0] * 2
print(y) # [0, 0]
y = [copy.deepcopy(y) for num in range(1,5)]
print(y) # [[0, 0], [0, 0], [0, 0], [0, 0]]
y[0][0] = 5
print(y) # [[5, 0], [0, 0], [0, 0], [0, 0]]
Я помню дискуссию на эту тему либо на DosTips.com, либо здесь, на SO, но я не могу ее найти. Надеемся, что кто-нибудь сделает это, и мы сможем пометить этот вопрос как дубликат.
Мы знаем, что командные файлы будут искать текущий каталог, а затем переменную пути, чтобы найти исполняемый файл. Команда START
также выполняет поиск по следующему пути реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
. Таким образом, у вас есть несколько вариантов поиска исполняемого файла.
Вы можете использовать команду WHERE
, которая ищет текущий каталог и каталоги в переменной PATH.
where notepad.exe
Вы также можете просто искать переменную пути с помощью команды FOR
.
for %%I in (notepad.exe) do echo %%~$PATH:I
И, конечно, вы можете искать путь в реестре, как я уже упоминал выше, выполняя REG QUERY.
Edit2
Это может представлять интерес в отношении того, что вы делаете (в отличие от того, почему что-то работает так, как работает).
Из предыдущего ответа
Можно ли создать сокращенные имена для использования внутри cmd?
См.
Doskey /?
.Вы можете сделать это
doskey cddesk=cd "%userprofile%\desktop"
Затем введите
cddesk
.Поместив все свои макросы в пакетный файл, вы можете выполнить автозагрузку. Конечно, вы можете сделать это и с пакетными файлами.
Из Технического справочника по реестру Windows 2000, Microsoft, 2000.
AutoRun HKCU\Software\Microsoft\Command Processor
Тип данных Диапазон Значение по умолчанию
Список команд REG_SZ Для этой записи значение по умолчанию отсутствует.
Описание
Содержит команды, которые выполняются при каждом запуске Cmd.exe.
Также смотрите этот пакетный файл https://pastebin.com/A2qLw8r3 , в котором перечислены специальные имена.
В командной строке
start shell:desktop
Или в Пуск - Выполнить (Winkey + R) просто
blockquote>shell:desktop
Редактировать
Я просто добавлю несколько предостережений здесь.
Речь идет об открытии исполняемых файлов с помощью команды
Start
. Огромное количество правил применяется к неисполняемым файлам.Не используя
Start
CMD предварительно обрабатывает командную строку и отправляет FQFN вCreateProcess
- так что CMD ищет путь неCreateProcess
.
https://docs.microsoft.com/en-us/windows/desktop/shell/launch - это документация для ShellExecute. Все заканчивается вызовом CreateProcess https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessw . Кроме того, предварительная обработка CMD подробно описана здесь https://books.google.com.au/books/about/Windows_NT_Shell_Scripting.html?id=jrdQAAAAMAAJ&redir_esc=y . Также
start /?
предоставляет документацию для всех трех способов запуска файлов. Сводка здесь Команда для запуска .bat файлаНесколько забавных фактов. CMD, если не может распознать расширение файла, попытается выполнить его.
ShellExecute
будет прослушивать неизвестные файлы https://docs.microsoft.com/en-us/windows/desktop/com/filetype-key .цитата из rojo: Спасибо за дамп ссылки. Я пытаюсь понять, как
blockquote>ShellExecute
может спасти меня от необходимости полностью определять имена путей. Это был мой основной вопрос. «Чтобы использовать ShellExecute или ShellExecuteEx, ваше приложение должно указать объект файла или папки, который должен быть обработан в , и глагол, который определяет операцию». Это часть «указать файл или папку», о которой я спрашиваю.Он использует 6 шагов в CreateProcess и, если ничего не получается, он использует пути к приложениям. Если глагол не указан, используется глагол по умолчанию (обычно открытый). См. Мой ответ здесь . Как мне автоматизировать симуляцию щелчка правой кнопкой мыши по файлу и выбора первой опции, используя vbscript .
Так что это пересечение 4 технологий. Совместимость с MSDos, изменения, сделанные IBM для OS / 2 и обновленные Microsoft для Windows 2000, стандартный способ запуска программ CreateProcess для Windows, а с Windows 95 мы получили функции оболочки, основанные на OLE
[1154 ] цитата из Рохо: Snap! Ты прав! В PowerShell мне удалось создать объектSystem.Diagnostics.Process
, установить$ps.StartInfo.UseShellExecute = $true
, а затем запустить «wordpad» без какого-либо расширения файла или полного пути. Установка.UseShellExecute property
в$false
привела к сбою выполнения. Как интересно!blockquote>