this is almost the same as a python list, except without the same copy semantics