Some variables are not "values", but "pointers".
The list_ variable is a pointer to an existing list.
So, here you're actually creating a list:
pointer_to_list = [] #this list is stored in memory, and the pointer will look at it
Here, you add three elements to the list:
pointer_to_list += [None, pointer_to_list, pointer_to_list]
This list contains 3 elements. None, pointer, pointer.
But it happens that the pointer points to the list itself. This doesn't mean that it's being infinitely "assigned", just that if you get the value of the pointer, you're getting the whole list.
And the list contains the pointer. And the pointer points to the list, and the list contains the pointer, and the pointer points to the list.....
This results in you being able to infinitely get the list inside the list inside the list.
But in truth, only one list exists, containing three elements: None, pointer, pointer.
This could be done also with list_ += [None, list_]