at least until the object is not intended to do copying the structure of seq[seq[int]] will copy its children seq var x = @[@[1, 2], @[1]] var y = x x.add @[1] echo x, y x[0][0] = 42 echo x, y @[@[1, 2], @[1], @[1]]@[@[1, 2], @[1]] @[@[42, 2], @[1], @[1]]@[@[1, 2], @[1]] type A = object x: B B = ref object x: int var x = @[A(x: B(x: 10))] var y = x echo repr(x), repr(y) x[0].x.x = 32 echo repr(x), repr(y) @[A(x: B(x: 10))]@[A(x: B(x: 10))] @[A(x: B(x: 32))]@[A(x: B(x: 32))]