标题不言自明。如何从另一个列表Y(相同的结构)构建一个新的列表X,但结果列表指向内存区域的其他位置,实际上是另一个对象?我尝试使用make-list :initial-element Y
或附加到空列表,但我仍然得到相同的对象。谢谢!
答案 0 :(得分:12)
Common Lisp
使用 COPY-LIST 复制第一个列表级别。
使用 COPY-TREE 复制一个圆锥树,将在所有级别复制多级列表。
COPY-TREE和COPY-LIST都只会复制这些内容而不会复制其他内容。列表中的内容保持不变(意味着EQL,而不是EQ)。
有关这些及相关功能,请参阅Common Lisp HyperSpec的The Conses Dictionary。
答案 1 :(得分:3)
您可能想要使用COPY-LIST。
答案 2 :(得分:0)
我的副本列表(使用sbcl)有效。
REPL:
(defvar a '((1 2 3) (4 5 6)))
(defvar b (copy-tree a))
(setf (nth 0 (nth 0 b)) "4")
a
; ((1 2 3) (4 5 6)) is returned
b
;(("4" 2 3) (4 5 6)) is returned
也许如果你给我们更多的消息来源,我们可以提供帮助。