`seq[T]` will not share buffer like slices in golang - it has its own copy of content. For example import std/strformat let a = [1, 2, 3, 4] let b = a[0..1] let c = a let d = b echo &"typeof(a) = {$typeof(a)}" echo &"typeof(b) = {$typeof(b)}" echo &"typeof(c) = {$typeof(c)}" echo &"typeof(d) = {$typeof(d)}" echo &"addr a = {cast[uint](addr a):x}" echo &"addr b = {cast[uint](addr b):x}" echo &"addr c = {cast[uint](addr c):x}" echo &"addr d = {cast[uint](addr d):x}" echo &"addr b[0] = {cast[uint](addr b[0]):x}" echo &"addr d[0] = {cast[uint](addr d[0]):x}" Run
Output typeof(a) = array[0..3, int] typeof(b) = seq[int] typeof(c) = array[0..3, int] typeof(d) = seq[int] addr a = 555e1b1cd020 addr b = 555e1b1cd200 addr c = 555e1b1cd2c0 addr d = 555e1b1cd210 addr b[0] = 7f521ba0a058 addr d[0] = 7f521ba0a078 Run So you can't modify `a` through `b`, also modify `d` won't affect `a` and `b`.