Python中的集合是否可变?
换句话说,如果我这样做:
x = set([1, 2, 3])
y = x
y |= set([4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
是x和y仍然指向同一个对象,还是创建并分配给它的新集y?
Tom*_*rdt 41
>>>> x = set([1, 2, 3])
>>>> y = x
>>>>
>>>> y |= set([4, 5, 6])
>>>> print x
set([1, 2, 3, 4, 5, 6])
>>>> print y
set([1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
结论:集合是可变的.
Kat*_*iel 16
你的两个问题是不同的.
Python设置是否可变?
是:"可变"意味着您可以更改对象.例如,整数不可变:您不能将数字更改为1其他任何内容.但是,您可以向集合中添加元素,从而使元素变异.
有
y = x; y |= {1,2,3}变化x吗?
是.代码y = x表示"将名称绑定为名称与当前名称y相同的对象x".代码y |= {1,2,3}调用y.__ior__({1,2,3})引擎盖下的魔术方法,它改变了名称所代表的对象y.由于这是由表示的相同对象x,因此您应该期望该集合发生更改.
您可以检查两个名字是否指向准确地使用相同的对象is操作:x is y只是如果对象由名称表示x和y是同一个对象.
如果要复制对象,通常的语法是y = x.copy()或y = set(x).但这只是一个浅表副本:虽然它复制了set对象,但是不会复制所述对象的成员.如果您想要深度复印,请使用copy.deepcopy(x).
viv*_*vek 10
Python 集分为两种类型。可变的和不可变的。使用 'set' 创建的集合是可变的,而使用 'frozenset' 创建的集合是不可变的。
>>> s = set(list('hello'))
>>> type(s)
<class 'set'>
Run Code Online (Sandbox Code Playgroud)
以下方法适用于可变集。
s.add(item) -- 将项目添加到 s。如果list已经在 s 中则无效。
s.clear() -- 从 s 中删除所有项目。
s.difference_update(t) -- 从 s 中删除也在 t 中的所有项目。
s.discard(item) -- 从 s 中删除项目。如果 item 不是 s 的成员,则什么都不会发生。
所有这些操作都会在适当的位置修改 set 。参数 t 可以是任何支持迭代的对象。