Другой способ взглянуть на это: Используются 64 бита для представления чисел. Как следствие, не может быть представлено более 2 ** 64 = 18 446 744 073 709 551 616 различных чисел.
Тем не менее, Math говорит, что существует уже бесконечное число десятичных знаков между 0 и 1. IEE 754 определяет кодировку для эффективного использования этих 64 бит для гораздо большего количества пробелов плюс NaN и +/- Infinity, поэтому есть пробелы между точно представленными числами, заполненными числами, только приближены.
К сожалению, 0,3 сидит в промежутке.
Слабое свойство становится равным нулю, как только нет других сильных ссылок на значение, которое оно имеет.
Таким образом, у вас слабое свойство содержит единственную ссылку на экземпляр альбома, и оно сразу становится нулевым после присвоения.
Исправление будет зависеть от способа использования / создания ваших данных. Если альбом хранит ссылки на его песни, тогда вы должны сначала создать и сохранить альбомный объект, а затем использовать его для инициализации своих песен. Если у альбома нет ссылок на его песни (что, вероятно, было бы странно), тогда вы можете просто сделать переменную альбома сильной.