LINUX.ORG.RU

Ссылка на элемент списка в другом списке


0

0

Есть список аттрибутов с описанием их характеристик и список значений полей.

Как сделать, чтобы список значений хранил "рядом" ссылку на свой аттрибут, а не само значение элемента списка?

[ (ref_attr, val), ... ]


Простите, что не указал язык программирования :-) Это - Python

gtyrin
() автор топика

Любое неэлементарное значение хранится по ссылке:

>>> a = 1
>>> b = [a]
>>> b
[1]
>>> c = [a]
>>> c
[1]
>>> a = 2
>>> b
[1]
>>> class A:
...     val = 1
... 
>>> a = A()
>>> a.val
1
>>> a.val = 2
>>> a.val
2
>>> a.val = 1
>>> b = [a]
>>> b
[<__main__.A instance at 0xb7d73fcc>]
>>> c = [a]
>>> c
[<__main__.A instance at 0xb7d73fcc>]
>>> 

Kpoxman ★★
()
Ответ на: комментарий от Kpoxman

О чем вы написали, мне известно, "но" простой пример: l=[1,2,3] l2=[l,4,5] l=[3,2,1] Не следует ожидать, что в l2 1-й элемент изменится.

gtyrin
() автор топика
Ответ на: комментарий от gtyrin

так ты же список не изменяешь. В l хранится ссылка на список,
последнее присваивание изменяет эту ссылку, а не список. 

In [1]: l = [1, 2, 3]

In [2]: l2 = [l, 4, 5]

In [3]: l[0:-1]
Out[3]: [1, 2]

In [4]: l[0:]
Out[4]: [1, 2, 3]

In [5]: l[0:] = [7, 8, 9]

In [6]: l
Out[6]: [7, 8, 9]

In [7]: l2
Out[7]: [[7, 8, 9], 4, 5]

Begemoth ★★★★★
()
Ответ на: комментарий от gtyrin

> О чем вы написали, мне известно, "но" простой пример: l=[1,2,3] l2=[l,4,5] l=[3,2,1] Не следует ожидать, что в l2 1-й элемент изменится.

Наоборот, первый элемент в l2 всегда будет меняться. В питоне всё - ссылки на mutable и immutable объекты. Подробнее:

http://rg03.wordpress.com/2007/04/21/semantics-of-python-variable-names-from-...

anonymous
()
Ответ на: комментарий от anonymous

По ссылке не ходил. Попробуйте сначала выполнить этот примерчик со списками.

Kpoxman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.