Skip to content

Instantly share code, notes, and snippets.

@byBretema
Last active June 7, 2017 14:29
Show Gist options
  • Save byBretema/09e9b6fac67269990b8c788b6c312ebc to your computer and use it in GitHub Desktop.
Save byBretema/09e9b6fac67269990b8c788b6c312ebc to your computer and use it in GitHub Desktop.
How to avoid 'deques' pointer-like behaviour...
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from collections import deque
if __name__ == '__main__':
''' Creamos las deques con las que trabajaremos. '''
# DobleCola que queremos pasar como argumento.
a = deque()
# DobleCola que recibira 'a' como 'puntero'.
b = deque()
# DobleCola que recibira 'a' como 'copia'.
c = deque()
# Iniciamos la DobleCola que queremos pasar, con algunos elementos..
a.append(1)
a.append(2)
a.append(3)
a.append('Hola :D')
''' deque's donde queremos almacenar la deque 'a' '''
# 1.- Pasando la deque como argumento. (Se comporta como 'puntero'.)
b.append(a)
# 2.- Descomponiendo la deque en un array y pasando este como argumento
# al constructor de una deque nueva. (Se comporta como 'copia'.)
c.append(deque([x for x in a]))
'''
Para comprobar que lo anterior comentado es cierto:
- Visualizaremos el estado inicial de las deque.
- Haremos una modificacion en la deque 'a'.
- Visualizaremos el estado alcanzado.
'''
# Estado inicial.
print()
print('a: '+str(a))
print('b: '+str(b))
print('c: '+str(c))
# Modificacion de 'a'.
a.pop()
# Estado alcanzado.
print()
print('a: '+str(a))
print('b: '+str(b)) # Se ve la modificacion aplicada en 'a'.
print('c: '+str(c)) # NO se ve la modificacion aplicada en 'a'.
##############
# - SALIDA - #
##########################################################
#
# # Estado inicial.
# >>> a: deque([1, 2, 3, 'Hola :D'])
# >>> b: deque([deque([1, 2, 3, 'Hola :D'])])
# >>> c: deque([deque([1, 2, 3, 'Hola :D'])])
#
# # a.pop()
#
# # Estado alcanzado.
# >>> a: deque([1, 2, 3])
# >>> b: deque([deque([1, 2, 3])])
# >>> c: deque([deque([1, 2, 3, 'Hola :D'])])
#
##########################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment