In Python everything is an object, and what that means is everything gets it own memory.
When you initialized listOne = [1, 2, 3], it was given a memory address.
You then used the assignment operator = to assign the memory location of listOne to listTwo.
So if we take your example:
listOne = [1, 2, 3]
listTwo = listOne
We can do:
listOne is listTwo
#Output: True
Somebody mentioned you can use the slice operator : but that gives you a Shallow Copy. If you're not familiar with the difference between Shallow and Deep Copy, read these docs. Basically, a Shallow Copy is a new outer container object (the [ ] and the internal elements are references to the same memory locations. A Deep Copy is also a new outer container but gets brand new copies of the objects inside (i.e. identical copies of the objects but at new memory locations).
I leave you with this example of a Shallow Copy with non-primative types (i.e. not int's like yours):
>>> class Sample:
def __init__(self, num):
self.num = num
self.id = id(self)
>>> s1 = Sample(1)
>>> s2 = Sample(2)
>>> listOne = [s1, s2]
>>> listOne[0].num
1
>>> listOne[0].id
88131696
>>> listOne[1].num
2
>>> listOne[1].id
92813904
# so far we know that listOne contains these unique objects
>>> listTwo = listOne
>>> listTwo[0].num
1
>>> listTwo[0].id
88131696
>>> listTwo[1].num
2
>>> listTwo[1].id
92813904
# well shoot, the two lists have the same objects!
# another way to do show that is to simply print the lists
>>> listOne
[<__main__.Sample object at 0x0540C870>, <__main__.Sample object at 0x05883A50>]
>>> listTwo
[<__main__.Sample object at 0x0540C870>, <__main__.Sample object at 0x05883A50>]
# those odd number sequences are hexadecimal and represent the memory location
# to prove the point further, you can use the built in hex() with id()
>>> hex(listOne[0].id) # id is 88131696 from above
'0x540c870'