169 похожих чатов

Хотел бы ещё задать вопрос, а где можно прочитать про

то, что из себя представляет пустой Array: [ ] ?
Просто столкнулся вот с таким немного неинтуитивным поведением:

Понятно, что первый пример можно интерпретировать, как a=b="указатель на некоторое место в памяти" и дальнейший push! будет добавлять элементы по этой ячейке, и поэтому и a и b ссылаются на эту память, но хотелось бы понять, что же именно из себя представляет [ ].
И чем конкретно отличается 1 и 3 случаи

5 ответов

8 просмотров

на производительность будет существенно влиять тип массива. julia> a = [] Any[] julia> b = Int32[] Int32[]

Можно проверить, в сумме будет меньше аллокаций по рбъему если вы сразу создадите undef массив и присвоите первое значение, чем если создать пустой и сделать push! ... ещё пустой Any - это 48b, а пустой Int - 64b аллокаций

Вам выше правильно все сказали. Но можете ещё с другой стороны посмотреть: операция x = [] это не одна операция, а две. Первая операция, это создание массива ([] это всего лишь синтаксический сахар для конструктора Vector{Any}()) и вторая операция - это binding, привязывание созданного объекта к переменной x (эта операция обозначается =). Соответственно, все ваши примеры можно рассматривать через эту призму: где-то вы делаете два binding для одного и того же объекта, где-то вы создаёте два объекта и делаете для каждого индивидуальный binding, где-то вы переменную привязываете сначала к одному объекту, потом к другому.

Поведение заключается в том, что массив это mutable struct и передаётся по ссылке. В твоём примере создано две ссылки на один массив, поэтому результат таков

Paul Dydyshko
Поведение заключается в том, что массив это mutabl...

Здесь ещё стоит упомянуть, например разницу между v = [1,2,3] u = v v *= 2 u .*= 3 u, v

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Any electron dev here?
Sayanth Tezro
12
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Карта сайта