Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单独列表中的多个引用;python_Python_List_Reference_Immutability_Mutable - Fatal编程技术网

单独列表中的多个引用;python

单独列表中的多个引用;python,python,list,reference,immutability,mutable,Python,List,Reference,Immutability,Mutable,我试图基本上创建引用来绘制多个关系,并将它们存储在列表或字典中 基本上: variable1=10 //在这种情况下,“ref”表示变量应为引用) listA=[variable1(ref),variable2,variable3] 列表B=[variable1(参考)、variable4、variable5] 列表中的i的: i=i+10 列表B中的i的: i=i+10 打印列表A[0] //应该打印30 打印列表b[0] //应该打印30 如何将对同一变量的两个引用拆分为两个单独的列表 两个

我试图基本上创建引用来绘制多个关系,并将它们存储在列表或字典中

基本上:

variable1=10

//在这种情况下,“ref”表示变量应为引用)
listA=[variable1(ref),variable2,variable3]
列表B=[variable1(参考)、variable4、variable5]

列表中的i的

i=i+10

列表B中的i的

i=i+10

打印列表A[0]

//应该打印30

打印列表b[0]

//应该打印30


如何将对同一变量的两个引用拆分为两个单独的列表

两个列表,每个都包含相同集合的键,比如字典,怎么样

例如:

MASTER = [10,11,12,13,14]

LISTA = [0,1,2]
LISTB = [0,3,4]

for i in LISTA: MASTER[i] += 10
for i in LISTB: MASTER[i] += 10

print MASTER[LISTA[0]]

print MASTER[LISTB[0]]

或者使用包装类:

class SharedInt:
    val = None
    def __init__(self, v): self.val = v

    def __add__(self, a): 
        self.val += a
        return self.val

    def __int__(self): return self.val

v1 = SharedInt(10)

listA = [v1, 11, 12]
listB = [v1, 13, 14]

for i in listA: i += 10
for i in listB: i += 10

print int(listA[0])
print int(listB[0])

最后,或使用嵌入式列表:

v1 = [10]

listA = [v1, 11, 12]
listB = [v1, 13, 14]

for i in listA: 
    if isinstance(i, list): i[0] += 10 
    else: i += 10
for i in listB: 
    if isinstance(i, list): i[0] += 10 
    else: i += 10

print listA[0]
print listB[0]

请注意,第一个示例将所有ListX成员视为“引用”,而最后两个示例将这些成员视为“值”,除非您分别将它们设置为
SharedInt()
s或将它们包含在列表中

换句话说,

LISTA[1] = 21 # First example ListA[1] = 11 # Second, third examples LISTA[1]=21#第一个示例 ListA[1]=11#第二、第三个示例
是的,对于可变表,不是的,对于不可变表,两个列表如何,每个列表都包含相同集合的键,比如说dictionary?tcaswell,你能更具体一点吗。语法是什么?有一个可变/不可变的命令吗?jedwards,你能告诉我如何使用字典吗?这两个都可以,但我正在寻找一个更干净的命令,因为这将成为我正在编写的程序中的一个噩梦。有没有办法将变量类型设置为可变、不可变?否则我可能只需要使用字典。嗯,int总是“按值”传递(事实上,是对不可变对象的引用),所以您必须采取措施避免这种情况发生。将其包装在列表中(示例3)是一种常见的技术,但不可能“通过引用”将其作为标准int传递。还有一些讨论,但结果是一样的。不幸的是,如果我将其设置为字典,则无论它存储在何处,它都会成为“引用”,对吗?一个字典的所有对象都指向一个变量?不完全一样。例如
d={'var1':10,'var2':11,'var3':12}
定义了一个包含三个条目的字典。类似于
d['var1']+=10的内容将使与键
var1
关联的值增加10。但是
x=d['var1'];x+=10
将不会--
d['var1']
将保持不变。