Sumor: Все динамические массивы всегда нумеруются с 0 и чтобы небыло путаницы с использованием статических/динамических массивов, статические массивы также принято нумеровать с 0, а не из-за какого-то там влияния. Если в книгах написано, что массивы нужно нумеровать с 1, то это плохие книги, которые учат дурному тону и вносят путаницу в и без того не окрепшие мозги новичков.
Строки нумеруются с 1 из-за особенностей их реализации - по индексу 0 в строках лежит их длина.
@DmitryPhilimonov согласитесь, если вы сделаете рефакторинг, да ещё и комментарии с примером накатаете, это уже будет другой код и вполне возможно, что это уже будет не жесть. Но сейчас-то вы нам написали одну чудо-строчку...
@SHAKIRA Учитесь пользоваться дебагером. Код не может просто зависнуть. Под отладкой всегда есть возможность посмотреть что именно происходит в вашей программе.
А что, были прецеденты? Если не доверяете встроенному ObjectID, то можете воспользоваться UUID https://ru.wikipedia.org/wiki/UUID - лучшие умы человечества гарантируют вам его уникальность :)
Под капотом там вообще говоря очень много интересного сделано. К примеру, те же самые числа, которым присваиваются значения от нуля до какого-то значения (255? точно не помню) ссылаются на один и тот же объект в памяти, который создаётся при инициализации интерпретатора. Т.е. все переменные в программе, которым присвоено, скажем, 10 будут ссылками на один объект и реального выделения памяти не будет. Хоть миллиард переменных создай. А вот для остальных чисел уже реально выделяется память.
Сделано это, так же как и со строками, в целях оптимизации производительности.
Строки нумеруются с 1 из-за особенностей их реализации - по индексу 0 в строках лежит их длина.