Вы можете использовать расширение параметра замены 111 Bash для заполнения переменной цикла. Например:
MANPATH=/usr/lib:/usr/sfw/lib:/usr/info
# Replace colons with spaces to create list.
for path in ${MANPATH//:/ }; do
echo "$path"
done
Примечание. Не заключайте подстановочное расширение в кавычки. Вы хотите, чтобы расширенные значения из MANPATH интерпретировались циклом for как отдельные слова, а не как одна строка.
ВСЕ в python являются объектами, и python никогда не делает копии, если об этом явно не просят.
Когда вы делаете
innerList = [0] * 10
, вы создаете список из 10 элементов, все из они относятся к одному и тому же объекту int
0
.
Поскольку целочисленные объекты неизменяемы , когда вы делаете
innerList[1] = 15
, вы меняете второй элемент list так, чтобы он ссылался на другое целое число 15
. Это всегда работает из-за неизменности объектов int
.
Вот почему
outerList = innerList * 5
создаст объект list
с 5 элементами, каждый из которых является ссылкой на тот же innerList
, как указано выше. Но поскольку объекты list
являются изменяемыми :
outerList[2].append('something')
То же, что:
innerList.append('something')
Потому что это две ссылки на тот же объект списка
. Таким образом, элемент попадает в единственный список
. Кажется, что он дублируется, но факт в том, что существует только один объект list
и много ссылок на него.
Напротив, если вы делаете
outerList[1] = outerList[1] + ['something']
Здесь вы создаете ] другой список
объект (использование +
со списками является явной копией) и присвоение ссылки на него во второй позиции externalList
. Если вы «добавите» элемент таким образом (не добавляя, а создавая другой список), innerList
не будет затронут.
list
и много ссылок на него.
Напротив, если вы делаете
outerList[1] = outerList[1] + ['something']
Здесь вы создаете еще один список
объект (использование +
со списками является явной копией) и назначение ссылки на него во второй позиции externalList
. Если вы «добавите» элемент таким образом (не добавляя, а создавая другой список), innerList
не будет затронут.
list
и много ссылок на него.
Напротив, если вы делаете
outerList[1] = outerList[1] + ['something']
Здесь вы создаете еще один список
объект (использование +
со списками является явной копией) и назначение ссылки на него во второй позиции externalList
. Если вы «добавите» элемент таким образом (не добавляя, а создавая другой список), innerList
не будет затронут.
списки не являются примитивами, они передаются по ссылке. Копия списка - это указатель на список (на жаргоне C). Все, что вы делаете со списком, происходит со всеми копиями списка и копиями его содержимого, если вы не делаете неглубокую копию.
[[0] * columns] * rows
Ой, мы только что составили большой список указателей на [0]. Измените один, и вы измените их все.
Целые числа не передаются по ссылке, они действительно копируются, поэтому [0] * contents действительно создает множество НОВЫХ 0 и добавляет их в список.