'Create a copy of a |ASN.1| type or object.
Any parameters to the *subtype()* method will be added to the corresponding
properties of the |ASN.1| object.
Parameters
tagSet: :py:class:`~pyasn1.type.tag.TagSet`
Object representing non-default ASN.1 tag(s)
subtypeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection`
Object representing non-default ASN.1 subtype constraint(s)
sizeSpec: :py:class:`~pyasn1.type.constraint.ConstraintsIntersection`
Object representing non-default ASN.1 size constraint(s)
Returns
new instance of |ASN.1| type/value'

def subtype(self, implicitTag=None, explicitTag=None, subtypeSpec=None, sizeSpec=None, cloneValueFlag=None):

    if ((implicitTag is not None) and (implicitTag is not noValue)):
        tagSet = self._tagSet.tagImplicitly(implicitTag)
    elif ((explicitTag is not None) and (explicitTag is not noValue)):
        tagSet = self._tagSet.tagExplicitly(explicitTag)
    else:
        tagSet = self._tagSet
    if ((subtypeSpec is None) or (subtypeSpec is noValue)):
        subtypeSpec = self._subtypeSpec
    else:
        subtypeSpec = (self._subtypeSpec + subtypeSpec)
    if ((sizeSpec is None) or (sizeSpec is noValue)):
        sizeSpec = self._sizeSpec
    else:
        sizeSpec += self._sizeSpec
    clone = self.__class__(self._componentType, tagSet, subtypeSpec, sizeSpec)
    if cloneValueFlag:
        self._cloneComponentValues(clone, cloneValueFlag)
    return clone
