The outer parentheses are only grouping parentheses. You need to add a comma to make the outer enclosure a tuple:
a = (('x','y'),)*4
print(a)
# (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))
For context, it wouldn't make sense to get a tuple while doing f = (x + y)
, for example.
In order to define a singleton tuple, a comma is usually required:
a = (5) # integer
a = (5,) # tuple
a = 5, # tuple, parens are not compulsory
On a side note, duplicating items across nested containers would require more than just a simple mult. operation. Consider your first operation for example:
>>> a = [['x', 'y']]*3
>>> # modify first item
...
>>> a[0][0] = 'n'
>>> a
[['n', 'y'], ['n', 'y'], ['n', 'y']]
There is essentially no first item - the parent list contains just one list object duplicated across different indices. This might not be particularly worrisome for tuples as they are immutable any way.
Consider using the more correct recipe:
>>> a = [['x', 'y'] for _ in range(3)]
>>> a[0][0] = 'n'
>>> a
[['n', 'y'], ['x', 'y'], ['x', 'y']]