A tuple takes less memory space in Python:
>>> a = (1,2,3)
>>> a.__sizeof__()
48
whereas lists
MSeifert answer covers it broadly; to keep it simple you can think of:
tuple is immutable. Once it set, you can't change it. So you know in advance how much memory you need to allocate for that object.
list is mutable. You can add or remove items to or from it. It has to know the size of it (for internal impl.). It resizes as needed.
There are no free meals - these capabilities comes with a cost. Hence the overhead in memory for lists.