Programming Memoirs

Python’s built-in container data types: categorisation and iteration

The aim of this short article is to take a look on the built-in container data types in Python 3.1. This introduction, however, is not a typical one. Typical Python data types tutorials focus on describing individual data types one by one. Here, instead, I try to describe the ways Python container data types can be grouped according to their properties. I also explain when and why some containers are iterable, why others are not. Therefore, the article explains such concepts as:

  • mutable and immutable objects,
  • hashable objects,
  • ordered and unordered objects,
  • the relationship between sequence/set/mapping types with the iterable type, and demystifies the implicit sequence iterator in custom sequence containers.

The article assumes the reader has a fundamental understanding of container types in Python.

Brief recap

So… what are container data types in Python? In short — they are types whose instances are capable of storing other objects. As a quick reminder — some of the fundamental built-in container objects include:

  • lists – the most popular container data type in python; can store any number of any objects.
  • tuples – similar to list, yet once created are immutable,
  • sets – can store only unique elements,
  • bytes – immutable sequence of integers in the range 0 <= x < 256,
  • bytearray – like bytes, but mutable,
  • dictionary – also known as associative arrays. They contain mapping of keys into value,
  • collections.OrderedDict - ordered dictionary, present in the collections module. Like typical dictionary yet it remembers the order in which items have been added,
  • str – string, a sequence of unicode characters,
  • range – a sequence of numbers — more precisely a list containing arithmetic progressions
  • array.array – present in the array module. Similar to list, yet during the construction it is restricted to holding a specific data type,

More information on those can be found in http://docs.python.org/tutorial/datastructures.html

Python built-in container types cheat-sheet

I will just leave it here as it may come in handy for later.

Data type Mutable Ordered Literal example Constructor
Sequence types
list yes yes [1,2,3] list()
tuple no yes (1,2,3) tuple()
str no yes “text”  /  ‘text’ str()
range no yes range()
bytes no yes b’abcde’  /  b”abc” bytes()
bytearray yes yes bytearray()
array * yes yes array.array()
Set types
set yes no {1,2,3} set()
frozenset no no frozenset()
Mapping types
dict yes no {“key1″: “val”, “key2″: “val”} dict()
OrderedDict * yes yes none collections.OrderedDict()

* — can be found in a separate module

Categorising Python’s built-in container data types

The mentioned container types in Python can be segregated using the following criteria:

  • container mutability, or lack of thereof,
  • determinable order of contained elements, or lack of thereof,
  • the way the contained elements are accessed.

Mutable, immutable and hashable objects

What every newcomer to Python quickly learns is that all objects in Python can be either mutable or immutable. The fact that a container object is immutable doesn’t always mean that the objects it holds are also immutable (e.g. an immutable tuple holding mutable lists). However, container objects are fully immutable only if the object itself, and the objects it contains are recursively immutable. Recursively immutable objects may be hashable. This is important as only hashable objects can be used in a mapping container object (see below) as keys.

All of Python’s immutable built-in objects are hashable, while no mutable containers (such as lists or dictionaries) are.

Source: http://docs.python.org/release/3.1.3/glossary.html

Examples of mutable containers include:

  • list,
  • set,
  • dictionary,
  • OrderedDictionary
  • bytearray
  • array

Examples of immutable containers include:

  • string,
  • frozenset,
  • tuple,
  • bytes

The main implication of the mutable/immutable distinction and hashability is that not all container object can store all other container objects, in particular:

  • sets can store only hashable object (each object in set has to have a unique hash — sets do not store duplicate objects, as opposed to e.g. lists or tuples)
  • dictionaries can have only hashable objects as keys

Now, an interesting thing is that instances of custom classes in Python are by default hashable (even if they are by nature mutable), with their hash being their id(object). This means that two, seeming identical object instances of a custom class will have different hashes unless they implement valid __hash__() and __eq__() functions.  This is illustrated by the following code.

class MyClass1:
    """ This class does not implement any
    explicit __hash__() not __eq__() function. Thus
    the hash of the object is by default
    obtained using the id() function. """
    def __init__ (self, x):
        self.data = x
    def __getitem__(self, x):
        return self.data[x]

class MyClass2:
    """ This class does implement
    a valid __hash__() and __eq__() function. Thus
    the hash value is computed as expected. """
    def __init__ (self, x):
        self.data = x
    def __getitem__(self, x):
        return self.data[x]
    def __hash__(self):
        return hash(self.data)
    def __eq__(x, y):
        return hash(x) == hash(y)

obj1 = MyClass1((1,2,3))  # instance of MyClass1
obj2 = MyClass1((1,2,3))  # different, but identical, instance of MyClass1
my_set = {obj1, obj2}  # The two object are identical. We would expect only one to be added to set
print (my_set)
# output:  {<__main__.MyClass1 object at 0x1d3e110>, <__main__.MyClass1 object at 0x1d3e050>}
# Not good -- two identical objects are in the set. This is because their hash value is obtained from the id() function.

obj1 = MyClass2((1,2,3))  # instance of MyClass2
obj2 = MyClass2((1,2,3))  # different, but identical, instance of MyClass2
my_set = {obj1, obj2}  # The two object are identical. We would expect only one to be added to set
print (my_set)
# output:  {<__main__.MyClass2 object at 0x1d3e1d0>}
# As the object are identical, and hashed correctly, only one of them is actually inside the set.

Also, for the hashability to work in an expected manner, the programmer must “promise” that hashable object will not change during they lifetime. This promise, however, can be broken. Yet this can lead to unexpected problem in later development stages.

Why the distinction between mutable and immutable objects?

  1. Immutable objects can potentially be faster.
  2. Recursively immutable object are potentially hashable. Because such object never change their content throughout their lifetime, they can be used as keys in dictionaries. Also, hashability allows the use of the object in a set (sets store only elements with a unique hash).
  3. Code using immutable object is safer.

Order and unordered containers

Container object can store their content in either an ordered or unordered manner. Order, or lack of thereof, is unrelated to the mutability of objects.  This means that both mutable and immutable objects can be either ordered or unordered.

Examples of ordered containers include:

  • list,
  • string,
  • tuple,
  • bytes,
  • bytearrays,
  • collections.OrderedDict.
  • array

Examples of unordered containers include:

  • dictionary,
  • set,
  • frozenset.

When iterating over data in an ordered container object the data is a accesses in a determinable manner. When iterating over data in an unordered container object the data is accessed in an undetermined order. This is illustrated by the following code fragment.

my_list = list(range(10))
my_list.append (10)
my_list.append("text")
my_list.append(11)
print ("my_list:", my_list)

my_set = set(range(10))
my_set.add(10)
my_set.add("text")
my_set.add(11)
print ("my_set: ", my_set)

keys = "a b c d e f g h i j".split(" ")  # create a list of keys
my_dict = dict(zip(keys, range(10))) # zip() creates a dictionary from two sequences
my_dict['k']=10
my_dict["text_key"]="text_val"
my_dict['l']=11
print ("my_dict:", my_dict)

# program output:
# my_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'text', 11]
# my_set:  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 'text'}
# my_dict: {'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'j': 9, 'l': 11, 'k': 10, 'text_key': 'text_val'}

# as we can see, only elements in the my_list were output in a manner we could expect

Set, sequence, mapping and iterable container types

A different criterion with which one can divide container objects is by the way elements contained within those are accessed. This give rise to sequence, mapping, set and iterable container types.

Now, the interesting part is the distinction between set/sequence/mapping container types and the iterable container types . It was really hard to find any in-depth information on this. I reckon it was because most people just conform to the magic of Python according to which  “things just works”. I got interested why do they work the way they do — why are my simple custom sequence containers iterable even though they do not contain any __iter__() functions? What follows is what I gathered from the pieces of information I had found. Feel free to correct me if I erred somewhere.

Sequence types and sequence iterator

Sequence and mapping container object are quite similar. In each of them data stored is accessed by means of a key. The main difference is that in sequence containers values are accessed by keys implemented as (hashable) integers from 0 to n-1, where n is equal to the number of elements in the container, whereas in mapping containers, such key can be any hashable objects (e.g. tuples).

Sequence data types include e.g.

  • str,
  • bytes,
  • bytearray,
  • list,
  • tuple,
  • range.

All built-in sequence types are by default iterable as they implement an __iter__() function. This functions returns, depending on the specific built-in container object type, a list_iterator, tuple_iterator, str_iterator, bytes_iterator, bytearray_iterator or a range_iterator objects.

Custom sequence types are also iterable even if they do not explicitly implement an __iter__() function. In such case the __iter__() cannot be called, but an iterator object can still be retrieved with the iter(sequence_type_object) function as soon as you add a __getitem__() function in your class. To give an example of a simplistic __getitem__() function:

def __getitem__(self, x):
   return self.data[x]

This is the case because in such object this function is used by an implicit sequence iterator (see more in “Iterator types” section), which, because the values are mapped using integer keys from 0 to n-1, can with no trouble ‘predict’ the names of the keys.

Mapping types

As mentioned earlier, mapping container objects can use any hashable object as a key which servers as a mapping to a value.

Mapping types include e.g.:

  • dict,
  • collections.OrderedDict.

All built-in mapping types are by default iterable as they implement the __iter__() function.

Simple custom mapping objects types are generally not iterable unless they explicitly implement an __iter__() function. If this is not the case case __iter__() obviously cannot be called directly, but an iterator object can still be retrieved with the iter(mapping_object) function. Such iterator object will, however, only work if the keys in the dictionary are integers from 0 to n where n+1 is the number of items in the dictionary, which is rarely the case. Thus for custom mapping types it is advisable to inherit from the dict class.

Set types

Set container objects store hashable objects. The elements in sets are unordered.

Set data types include e.g.:

  • set,
  • frozenset.

All built-in set types are by default iterable as they implement an __iter__() function. This function returns, in the case of set and frozentset types, the set_iterator and frozenset_iterator objects respectively.

Custom set container objects have to explicitly implement the __iter__() function to be iterable.

Iterable types

Objects stored in pure iterable container objects cannot be accessed by means of a key, but can only be iterated over using a iterator object. Iterable containers implement an __iter__() function which returns the iterator object, which in turn implements an __iter__() function, returning itself and a __next__() returning next element in the container (or throwing an exception if the end has been reached).

Python defines several iterator objects to support iteration over general and specific sequence types, dictionaries, and other more specialized forms.

Source: http://docs.python.org/library/stdtypes.html

Now bare with me for a moment. Custom sequence/set/mapping containers do not have to implement the aforementioned iterator-related function. Thus, in pure theory, iterable and set/sequence/mapping containers are quite distinct things. However, in practice:

  • all built-in container types (set, sequence, mapping) also explicitly implement a __iter__() function, returning adequate iterator objects, e.g. list_iterator, set_iterator, tuple_iterator objects,
  • all custom sequence containers explicitly implementing a __getitem__() also implicitly implement an implicit sequence iterator returned via the iter() built-in function, returning an iterator object.

This boils down to the fact that in Python all mentioned built-in sequence/mapping/set containers are also iterable containers. All custom sequence containers are also iterable containers (due to implicit sequence iterator). However, not all iterable containers are sequence/mapping/set containers.


Interesting articles:

http://www.cs.toronto.edu/~tijmen/programming/immutableDictionaries.html

http://www.voidspace.org.uk/python/articles/mapping_sequence_ref.shtml

http://docs.python.org/py3k/library/stdtypes.html

5,323 ResponsesLeave one →

  1. По моему мнению Вы ошибаетесь. Могу это доказать. Пишите мне в PM.


    Между нами говоря, советую Вам попробовать поискать в google.com интересные детективы, историческое интересное или [url=https://congresociudad.uc3m.es/2017/03/14/experiencia-ciudadana/]здесь[/url] интересные букеты
    [url=https://congresociudad.uc3m.es/2017/03/14/espacio-urbano/]источник[/url]
    [url=https://www.giantbomb.com/profile/madangdisitbos/blog/watch-west-side-story-2020-full-movie-online-for-f/161163/]здесь[/url]
    [url=http://sn.ras.ru/index.php/forums/topic/16873/god-gives-jesus-camp-an-oscar-no/view/post_id/421534]на этом сайте[/url]
    [url=https://apply.workable.com/fmovies/]сайт[/url]
    [url=https://www.goodreads.com/topic/show/21407722-where-to-whatch-free-movies]тут[/url]

    Reply
  2. [url=https://anafranil24.com/]anafranil[/url] [url=https://celexa24.com/]celexa[/url] [url=https://diflucanf.com/]diflucan 200 mg over the counter[/url] [url=https://diflucanmed.com/]diflucan fluconazole[/url] [url=https://acyclovirv.com/]acyclovir 800[/url]

    Reply
  3. [url=https://bectrim.com/]where can i buy bactrim online[/url] [url=https://metforminmed.com/]metformin 500 mg tablet[/url] [url=https://cozaar24.com/]cozaar[/url] [url=https://fluoxetinemed.com/]buy fluoxetine online canada[/url] [url=https://ampicillintabs.com/]buy ampicillin[/url]

    Reply
  4. canadian sex cams [url=https://sexcams00.work]wap sex cams [/url] live sex cams in texas.
    redtube live sex cams [url=https://sexcams00.club]sexcams00[/url] omegle man sex cams.
    female sex cams [url=https://sexcams00.work]free couple sex cams [/url] sex spy cams.
    filipino sex cams [url=https://sexcams00.xyz]sexcams00[/url] aduly sex cams free.
    chaturbate sex cams [url=https://sexcams00.site]sexcams00[/url] mature women resisting sex cams.
    free live mobile sex cams [url=https://sexcams00.club]free latina sex cams [/url] sex live cams.
    fantasy sex cams [url=https://sexcams00.online]sexcams00[/url] 1 on 1 sex cams.
    hidden sex cams videos [url=https://sexcams00.live]sexcams00.live[/url] free mobile sex cams.

    Reply
  5. sex cams hd [url=https://sexcams00.live]private free sex cams [/url] free sex chat cams.

    Reply
  6. free latina sex cams [url=https://sexcams00.website]sex cams omegle [/url] adult naked sex cams.

    Reply
  7. cbd pure [url=http://buycbdoilonline.us.com/ ]cbd oils [/url] cbd cream cbd online

    Reply
  8. sex cams gay [url=https://sexcams00.live]family sex cams [/url] sex on hidden cams.

    Reply
  9. livr sex cams [url=https://sexcams00.xyz]sexcams00[/url] women sex with dogs …free cams.

    Reply
  10. sex cams for men [url=https://sexcams00.online]sexcams00[/url] xname sex cams.

    Reply
  11. Вот елки палки


    Позволю себе не согласится с вами mp3 bts, mp3 juice и [url=http://center-instrumenta.ru/forum/?PAGE_NAME=profile_view&UID=27707]сайт[/url] mp3 azarbayjanski
    [url=http://xn--d1abgebypi6a.xn--p1acf/users/anecocex]тут[/url]
    [url=https://uzaomos.news/forum/user/12812/]источник[/url]
    [url=https://streettuning.pro/forum/user/34486/]на странице[/url]
    [url=https://www.alligator.spb.ru/forum/index.php?PAGE_NAME=profile_view&UID=45143]здесь[/url]
    [url=http://wiki.raft-game.ru/index.php?title=Mp3hq]тут[/url]

    Reply
  12. average cost is

    aa64 ato do is 25mg

    Reply
  13. [url=https://diflucanf.com/]diflucan price south africa[/url] [url=https://hydroxychlorequine.com/]hydroxychloroquine for sale[/url] [url=https://ventolininhl.com/]ventolin buy[/url]

    Reply
  14. [url=https://onlineloan.us.com/]online cash advance[/url]

    Reply
  15. [url=http://ciprorx.com/]cipro 250[/url] [url=http://allopurinolm.com/]buy allopurinol[/url] [url=http://ataraxrx.com/]atarax cost[/url]

    Reply
  16. Какая интересная фраза


    Пиндык, я плачу просто )) скачать fifa, скачать фифа а также [url=http://15fifa.ru/skachat-patchi-fifa-15/34-mod-fifa-15-fifa-15-10-rus-eng.html]пак стадионов для fifa 15 скачать[/url] скачать fifa

    Reply
  17. female sex cams [url=https://sexcams00.site]sexcams00.site[/url] web cams sex.

    Reply
  18. cheap asian sex cams [url=https://sexcams00.online]sexcams00.online[/url] big thighs forced mature sex cams.
    female live sex cams [url=https://sexcams00.online]young girl sex cams [/url] live sex cams transvestites.
    totaly free sex cams [url=https://sexcams00.website]sexcams00[/url] public sex hidden cams.
    live sex cams guys [url=https://sexcams00.online]free live streaming sex cams [/url] steph and real life cams maya sex.
    live voyeur sex cams [url=https://sexcams00.live]couple live sex cams [/url] live sex on web cams.
    live teen sex cams [url=https://sexcams00.live]sexcams00[/url] free sex face to face cams.
    best online sex cams [url=https://sexcams00.online]sexcams00[/url] black live sex cams.
    home sex cams [url=https://sexcams00.space]sexcams00[/url] homemade cams small teenage girl having sex with her dog.

    Reply
  19. free live private sex cams [url=https://sexcams00.live]sexcams00.live[/url] real life cams julia having sex.

    Reply
  20. hemp oil for pain [url=http://cbd-online.us.com/ ]cbd oils [/url] cbd for sale cbd

    Reply
  21. cbd oil for dogs [url=http://cbd-online.us.com/ ]buy hemp oil [/url] medterra cbd cbd hemp

    Reply
  22. free live sex cams com [url=https://sexcams00.website]no sign up sex cams [/url] sex cams online.

    Reply
  23. cheap live sex cams [url=https://sexcams00.club]young girl live sex cams [/url] teen house sex cams.

    Reply
  24. live hidden sex cams [url=https://sexcams00.site]sexcams00[/url] just sex chat, no cams with mature women.

    Reply
  25. spy sex cams [url=https://sexcams00.work]sexcams00.work[/url] l.ive jap sex cams.
    live sex cams’ [url=https://sexcams00.space]sex cams couples [/url] forcible sex video cams mature heavy women.
    watch free sex cams [url=https://sexcams00.space]sexcams00[/url] watch sex cams for free.
    gay sex cams free [url=https://sexcams00.xyz]sex cams com [/url] realtime spy appartments sex cams tv.
    free live ebony sex cams [url=https://sexcams00.space]sexcams00[/url] germany sex cams.
    live online sex cams and free sex chat rooms [url=https://sexcams00.space]sexcams00[/url] audio sex cams.
    free granny sex cams [url=https://sexcams00.work]sex cams live free [/url] real amatuer unwanted gangbang sex cams.
    live gay male sex cams [url=https://sexcams00.work]free hot sex cams [/url] hidden college dorm room sex cams live.

    Reply
  26. cbd drops [url=http://cbdoilinn.com/ ]cbd gummies walmart [/url] cbd oil benefits cbd gummies walmart

    Reply
  27. [url=http://acyclovirv.com/]acyclovir price[/url]

    Reply
  28. cbd vape [url=http://cbd-online.us.com/ ]cbd for dogs [/url] cbd online cbd vape

    Reply
  29. [url=https://loansonlinenb.com/]loans with monthly payments[/url]

    Reply
  30. Адвокат. Консультация Бесплатно. Помощь опытного адвоката в Запорожье, Днепре и по всей территории Украины по уголовным, гражданским, административным и хозяйственным делам, защита по делам об административных правонарушениях.
    Опыт работы более 20 лет.
    Консультации по телефону с 9 до 20 часов, бесплатно.
    Более подробно на сайте: [url=https://g.page/Lawierdnp?share ]ДНІПРОВСЬКИЙ АПЕЛЯЦІЙНИЙ СУД [/url]

    [url=https://advokat-zp.in.ua]Адвокат Запорожье[/url]

    Reply
  31. [url=http://furosemidepill.com/]buy cheap furosemide[/url]

    Reply
  32. [url=http://dapoxetine20.com/]buy dapoxetine[/url] [url=http://albenzamed.com/]albenza generic[/url] [url=http://vardenafilmed.com/]vardenafil tablets price[/url] [url=http://buspar365.com/]cost of buspar[/url] [url=http://lasixp.com/]lasix 20[/url] [url=http://cozaar24.com/]cozaar generic[/url] [url=http://wellbutrin911.com/]wellbutrin 450 mg[/url]

    Reply
  33. [url=http://vardenafilmed.com/]vardenafil tablets 20 mg[/url] [url=http://ciprorx.com/]ciprofloxacin 500 mg[/url] [url=http://dapoxetine20.com/]dapoxetine 30 mg tablet[/url] [url=http://bectrim.com/]bactrim ds 800[/url] [url=http://augmentinmed.com/]augmentin 625 tablets[/url] [url=http://toradol365.com/]toradol canada[/url]

    Reply
  34. [url=https://bupropion911.com/]where to buy bupropion[/url] [url=https://prednisonetabs.com/]where to buy prednisone online without a script[/url] [url=https://dapoxetine20.com/]dapoxetine buy[/url]

    Reply
  35. [url=https://tretinoint.com/]buy tretinoin[/url]

    Reply
  36. [url=https://sites.google.com/view/watchwrestlingonline/]watchwrestling[/url]

    Searching professor ratings has not in the least been easier. Leaf aegis of rather than of connected reviews at , professor reviews, and more. After in fact professor ratings from students, as overflow beyond as comments from erstwhile students. If you’re looking after more clear-cut results, you can fritter away filters to forward innards your professor ratings search and annex to your search experience.

    Qualify to sites:[url=http://zamokcentr.ru/blog/vskrytie-zamkov-zabivaniem-rigelej#comment_15964]care as a remedy for wrestling[/url] 527343_

    [url=https://justpaste.it/6gld0]movies123[/url] – Freee HD video online frree !

    Reply
  37. Адвокат. Консультация Бесплатно. Помощь опытного адвоката в Запорожье, Днепре и по всей территории Украины по уголовным, гражданским, административным и хозяйственным делам, защита по делам об административных правонарушениях.
    Опыт работы более 20 лет.
    Консультации по телефону с 9 до 20 часов, бесплатно.
    Более подробно на сайте: [url=http://advocat-dnepr.com.ua/]ГОСПОДАРСЬКИЙ СУД ЗАПОРІЗЬКОЇ ОБЛАСТІ [/url]

    [url=https://g.page/advodnepr?share]Адвокат Запорожье[/url]

    Reply
  38. cbd oil [url=http://cbdoilrx.us.com/ ]hemp oil [/url] pure cbd oil cbd pills

    Reply
    • JerryAgoli

       /  2020/07/04

      Знаете ли вы?
      Искусствоведы спорили, смирилась ли со скорой смертью неизлечимо больная женщина на картине русского художника, а она прожила ещё 37 лет.
      Преподаватель нескольких университетов, попавший в сталинские лагеря, и там умудрился обучать математике на куске мыла.
      Китай реализует в Пакистане собственный План Маршалла.
      Американский лейтенант из конвоя PQ-17 был спасён советским танкером и наладил его оборону от авианалётов.
      Герои украинского сериала о школьниках с трудом изъясняются по-украински.

      [url=http://arbeca.net/]arbeca[/url]

      Reply
  39. [url=https://onlineloan.us.com/]loan lenders for bad credit[/url]

    Reply
  40. [url=https://personaliloans.com/]personal loans for poor credit[/url]

    Reply
  41. free live web sex cams [url=https://sexcams00.live]sexcams00.live[/url] sex arabic hidden cams vids.

    Reply
  42. office sex cams [url=https://sexcams00.xyz]live gay sex cams [/url] omegle man sex cams.
    free bbw sex cams [url=https://sexcams00.live]free private sex cams [/url] src teen sex cams.
    new live sex cams [url=https://sexcams00.site]free hardcore sex cams [/url] sex chat cams.
    sex cams couples [url=https://sexcams00.work]sexcams00.work[/url] pantyhose forced sex cams.
    sex cams live free [url=https://sexcams00.space]sexcams00.space[/url] old man gay sex urinal cams.
    local live sex cams [url=https://sexcams00.website]exhabitionist sex cams [/url] women who do sex cams.
    girls live sex cams [url=https://sexcams00.space]live online sex cams [/url] free asian sex cams.
    new sex cams [url=https://sexcams00.live]sexcams00.live[/url] madagascar sex cams.

    Reply
  43. sex cams naked [url=https://sexcams00.work]black sex cams [/url] hidden cams used to view males having sex in department stores.

    Reply
  44. free video sex cams [url=https://sexcams00.website]sexcams00[/url] forced sex video cams.
    free tranny sex cams [url=https://sexcams00.site]sexcams00[/url] hidden camera at sex hidden voyeur cams.
    interactive sex cams [url=https://sexcams00.club]sexcams00.club[/url] live sex cams in maryland.
    live sex cams guys [url=https://sexcams00.xyz]sexcams00[/url] free live streaming sex cams hd.
    live voyeur sex cams [url=https://sexcams00.work]sexcams00.work[/url] hidden camera at sex hidden voyeur cams hidden spy cam sex.
    streaming live sex cams [url=https://sexcams00.live]sexcams00.live[/url] free live sex cams around the world.
    hot gay sex cams [url=https://sexcams00.website]sexcams00.website[/url] realtime sex cams.
    free indian sex cams [url=https://sexcams00.work]sexcams00[/url] 65 yo granny sex cams.

    Reply
  45. cbd [url=http://cbdoilrx.us.com/ ]buy cbd oil online [/url] cbd drops hemp cbd

    Reply
  46. Я думаю, что Вы не правы. Могу это доказать.


    согласен но как видиш на тавар есть спрос)) как в sims 4 помолодеть, как помолодеть на 6 лет или [url=http://www.cirota.ru/photos/?id=255amparchive=1]источник[/url] фильм как мужик помолодел
    [url=http://forum.anti.byaki.net/user/NicoleNep/]источник[/url]
    [url=https://sanstop.ru/product/vanna-iz-iskusstvennogo-kamnya-aquastone-liona/?DIGNITY=%D0%9C%D0%B5%D0%B6%D0%B4%D1%83+%D0%BD%D0%B0%D0%BC%D0%B8+%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D1%8F%2C+%D1%8F+%D0%B1%D1%8B+%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D0%BB%D1%81%D1%8F+%D0%B7%D0%B0+%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E+%D0%B2+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8.%0D%0A+%0D%0A---+%0D%0A%D0%97%D0%B0%D0%BC%D0%B5%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%2C+%D0%BE%D1%87%D0%B5%D0%BD%D1%8C+%D1%86%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5+%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B2+30+%D0%BB%D0%B5%D1%82%2C+%D0%BA%D0%B0%D0%BA+%D0%B2+49+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B8%D0%BB%D0%B8+<a+href%3Dhttp%3A%2F%2Fmoloda.su%2Ffrontlifting.php]%D0%A4%D1%80%D0%BE%D0%BD%D1%82%D0%BB%D0%B8%D1%84%D1%82%D0%B8%D0%BD%D0%B3<%2Fa]+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%BA+%D0%B2%D0%B5%D1%81%D0%BD%D0%B5&SHORTCOMINGS=%D0%9C%D0%B5%D0%B6%D0%B4%D1%83+%D0%BD%D0%B0%D0%BC%D0%B8+%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D1%8F%2C+%D1%8F+%D0%B1%D1%8B+%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D0%BB%D1%81%D1%8F+%D0%B7%D0%B0+%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E+%D0%B2+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8.%0D%0A+%0D%0A—+%0D%0A%D0%97%D0%B0%D0%BC%D0%B5%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%2C+%D0%BE%D1%87%D0%B5%D0%BD%D1%8C+%D1%86%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5+%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B2+30+%D0%BB%D0%B5%D1%82%2C+%D0%BA%D0%B0%D0%BA+%D0%B2+49+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B8%D0%BB%D0%B8+<a+href%3Dhttp%3A%2F%2Fmoloda.su%2Ffrontlifting.php]%D0%A4%D1%80%D0%BE%D0%BD%D1%82%D0%BB%D0%B8%D1%84%D1%82%D0%B8%D0%BD%D0%B3<%2Fa]+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%BA+%D0%B2%D0%B5%D1%81%D0%BD%D0%B5&COMMENT=%D0%9C%D0%B5%D0%B6%D0%B4%D1%83+%D0%BD%D0%B0%D0%BC%D0%B8+%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D1%8F%2C+%D1%8F+%D0%B1%D1%8B+%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D0%BB%D1%81%D1%8F+%D0%B7%D0%B0+%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E+%D0%B2+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8.%0D%0A+%0D%0A—+%0D%0A%D0%97%D0%B0%D0%BC%D0%B5%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%2C+%D0%BE%D1%87%D0%B5%D0%BD%D1%8C+%D1%86%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5+%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B2+30+%D0%BB%D0%B5%D1%82%2C+%D0%BA%D0%B0%D0%BA+%D0%B2+49+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B8%D0%BB%D0%B8+<a+href%3Dhttp%3A%2F%2Fmoloda.su%2Ffrontlifting.php]%D0%A4%D1%80%D0%BE%D0%BD%D1%82%D0%BB%D0%B8%D1%84%D1%82%D0%B8%D0%BD%D0%B3<%2Fa]+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%BA+%D0%B2%D0%B5%D1%81%D0%BD%D0%B5&NAME=NicoleSkawn&USED=&RATING=0&PRODUCT_NAME=%D0%92%D0%B0%D0%BD%D0%BD%D0%B0+%D0%B8%D0%B7+%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE+%D0%BA%D0%B0%D0%BC%D0%BD%D1%8F+AquaStone+%D0%9B%D0%B8%D0%BE%D0%BD%D0%B0&PRODUCT_ID=17868]тут[/url]
    [url=https://krd-tehno.ru/2019/04/08/poyavilis-novye-vstraivaemye-holodilniki-lex/?unapproved=11565&moderation-hash=7e66fc860af4426bb64b74df2efdf0a6#comment-11565]на странице[/url]
    [url=https://ooptom.ru/callback/?id=&act=fastBack&SITE_ID=22&name=NicoletuP&phone=81193284157&message=%D0%9F%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C+%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%21%0D%0A+%0D%0A---+%0D%0A%D0%B0+%D0%B2%D0%BE%D1%82+%D1%82%D1%83%D1%82+%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE+%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BD%D1%8B%D0%B5+%D0%B5%D1%81%D1%82%D1%8C+%D1%81%D0%B8%D0%BC%D1%81+3+%D0%BA%D0%BE%D0%B4%D1%8B+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C%2C+%D0%BA%D0%B0%D0%BA+%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C+%D0%B8+%D0%BF%D0%BE%D1%85%D1%83%D0%B4%D0%B5%D1%82%D1%8C+%D0%B0+%D1%82%D0%B0%D0%BA%D0%B6%D0%B5+<a+href%3Dhttp%3A%2F%2Fmoloda.su%2Fpannikulektomiya.php]%D0%BF%D0%B0%D0%BD%D0%BD%D0%B8%D0%BA%D1%83%D0%BB%D1%8D%D0%BA%D1%82%D0%BE%D0%BC%D0%B8%D1%8F<%2Fa]+%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE+%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8+%D0%BF%D0%BE%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%B5%D1%82%D1%8C]источник[/url]
    [url=https://barcelona-mebel.ru/callback/?id=&act=fastBack&SITE_ID=s1&name=Nicolebig&phone=86366677741&message=%DF+%E8%E7%E2%E8%ED%FF%FE%F1%FC%2C+%ED%EE%2C+%EF%EE-%EC%EE%E5%EC%F3%2C+%C2%FB+%ED%E5+%EF%F0%E0%E2%FB.+%DF+%F3%E2%E5%F0%E5%ED.+%C4%E0%E2%E0%E9%F2%E5+%EE%E1%F1%F3%E4%E8%EC.%0D%0A+%0D%0A---+%0D%0A%CA%E0%EA%EE%E9+%ED%E5%EF%EB%EE%F5%EE%E9+%F2%EE%EF%E8%EA+%EA%E0%EA+%EF%EE%EC%EE%EB%EE%E4%E5%F2%FC+%EF%E0%F0%ED%FE%2C+%EA%E0%EA+%E2+42+%EF%EE%EC%EE%EB%EE%E4%E5%F2%FC+%E8+<a+href%3Dhttp%3A%2F%2Fmoloda.su%2Fprepucioplastika.php]%EF%F0%E5%EF%F3%F6%E8%EE%EF%EB%E0%F1%F2%E8%EA%E0<%2Fa]+%EA%E0%EA+%EF%EE%EC%EE%EB%EE%E4%E5%F2%FC+%EC%E0%EC%E5]здесь[/url]

    Reply
    • JerryAgoli

       /  2020/06/21

      Знаете ли вы?
      Убийца с руками-клешнями избежал тюрьмы, но позже сам был убит.
      Самцы косатки, обитающие в Британской Колумбии, всю жизнь живут с мамой.
      Бывший наркокурьер, став премьер-министром Юкона, принимал законы против наркомании и наркоторговли.
      Ливийский диктатор пытался спасти от казни премьер-министра Пакистана.
      Первый футбольный трофей после начала пандемии коронавируса был разыгран в Таджикистане.

      [url=http://arbeca.net/]arbeca[/url]

      Reply
  47. thai sex cams [url=https://sexcams00.website]sex cams free live [/url] sex cams sqirting close up.

    Reply
  48. [url=https://acyclovirv.com/]acyclovir 800[/url] [url=https://ciprorx.com/]cipro over the counter canada[/url] [url=https://bupropion911.com/]buy bupropion[/url] [url=https://cozaar24.com/]cozaar tablets[/url] [url=https://ataraxrx.com/]buy atarax[/url]

    Reply
  49. completely free sex cams [url=https://sexcams00.website]www live sex cams [/url] real live cams sex.

    Reply
  50. [url=https://sites.google.com/view/watchwrestlingonline/]watchwrestling[/url]

    Searching professor ratings has on no account been easier. Read over quest of professor reviews at , professor reviews, and more. Check out ceremonious professor ratings from students, as expressively as comments from former students. If you’re looking after more sui generis results, you can manipulate filters to purify your professor ratings search and on high your search experience.

    Be like sites:[url=http://isi.freehostia.com/obl/index.php?site=guestbook]classify my professor[/url] 9527341

    Reply

Leave a Reply