Это не то, как python делает это в C, но я написал небольшой интерпретируемый язык в Java (который также допускает только массивы / списки с 1 типом данных) и реализовал списки смешанных типов. У меня был интерфейс Value и класс для каждого типа значения, и эти классы реализовали интерфейс Value. У меня был класс FunctionValue, класс StringValue, класс BooleanValue и класс ListValue, каждый из которых реализовывал интерфейс значений. Класс ListValue имеет поле типа List<Value>
, которое содержит элементы списка. Все методы интерфейса Value и его реализующие классы, которые выполняют такие вещи, как добавление чисел c, добавление строк, доступ к списку, вызов функций и т. Д. c. сначала возьмите объекты Value и сделайте разные вещи в зависимости от того, какой это фактический вид Value.
Вы можете сделать что-то подобное в C, хотя и на более низком уровне, поскольку у него нет интерфейсов и классов для помочь вам управлять своими типами.