Na przykład:

a << :hello # kiedykolwiek jest napotkane :hello to jest ta sama instancja

Dynamiczne typowanie Zmienne Magika nie mają ustalonego typu i mogą odwoływać się do różnych obiektów w czasie wykonania.

Wszystko w Magiku jest obiektem (nie ma rozróżnienia pomiędzy obiektami a prostymi typami jak liczby całkowite):

a << 1.2 # liczba rzeczywista jest przypisana do zmiennej 'a' a << "1.2" # później string jest przypisany do zmiennej 'a'

Obiekty Obiekty są implementowane w Magiku przy użyciu egzemplarzy. Egzemplarze są podobne do klas w innych językach programowania takich jak Java, ale mają istotne różnice. Magik obsługuje wielokrotne dziedziczenie i mixiny (które implementują funkcjonalność bez danych). Nowe instancje są tworzone przez klonowanie istniejącej instancji (która zazwyczaj jest egzemplarzem ale nie musi być).

Nowe egzemplarze są tworzone za pomocą instrukcji def_slotted_exemplar(), na przykład:

def_slotted_exemplar(:my_object,

{:slot_a, 34}, {:slot_b, "hello"} }, {:parent_object_a, :parent_object_b})

Ten fragment kodu definiuje nowy egzemplarz zwany my_object który ma dwa sloty (lub pola) zwane slot_a (zainicjowany na 34) i slot_b (zainicjowany na "hello") i dziedziczy z dwóch istniejących egzemplarzy zwanych parent_object_a i parent_object_b.